#asp.net #sql #visual-studio-2010
#asp.net #sql #visual-studio-2010
Вопрос:
я создаю мини-сайт форума .. и я создал несколько таблиц.
1) Пользователи 2) Темы 3) Комментарии 4) Темы
я создаю функцию, которая вставляла бы комментарий каждый раз, когда пользователь отправлял бы комментарий:
string saveComment = "INSERT INTO Comments(";
saveComment = " UsersID, ThreadsID, Date, Comments, CommentResponse";
saveComment = "Values('" "','";// no idea what to insert in the UsersID
saveComment = "" "','";// no idea what to insert in the ThreadsID
saveComment = DateTime.Now "','";
saveComment = CommenttxtBox.Text "','";
saveComment = commentResponseString "')";
Как вы можете видеть, поля имеют UsersID и ThreadId, оба связаны внешним ключом с таблицей комментариев.
Теперь, каждый раз, когда пользователь отправляет комментарий, я предполагаю, что мне нужно вставить также в поле UsersID (которое является значением int в таблице комментариев, и это поле постепенно увеличивается на 1 в таблице Users). Как я могу вставить комментарий и уведомить другую таблицу, чтобы она не увеличивала идентификатор пользователя на 1. на самом деле я хочу, чтобы идентификатор пользователя оставался неизменным для каждого пользователя, отправляющего комментарий..
Как мне это сделать? мне нужно вставить в несколько полей в одной таблице (комментарии), но информировать другие таблицы о том, что на самом деле это тот же пользователь, который отправил комментарий.
Примечание: я не знаю ни одного vb, только c #, и я использую Visual Studio 2010. asp.net
Комментарии:
1. изо всех сил пытаюсь понять вопрос здесь, почему вставка в таблицу комментариев оказывает какое-либо влияние на другие таблицы?
2. Потому что они связаны ссылками
Ответ №1:
Кстати, способ вставки — это проблема безопасности, вы можете получить SQL-инъекцию…
Используйте system.data.sqlclient.sqlparameters для передачи значений.
Комментарии:
1. есть ли способ преобразовать эти таблицы в объекты? чтобы я мог программировать на c#
2. LinqToSql был бы решением… но лично мне это не нравится. Если вы ищете оптимизированную обработку данных, вам нужно будет создавать свои собственные объекты.
3. почему вам это не нравится? в чем его недостаток. если я использую команды SQL, приходится писать много инструкций, и это также означает, что мне нужно начать изучать sql. я не знаю языка sql!!
4. SQL довольно прост. И синтаксис LINQ не так прост. LINQ сгенерирует множество sql-запросов, которые можно упростить в одном запросе… Зависит от сложности вашего проекта.
5. я прочитал в книге о ADO.NET и linq для sql. Подход LINQ для меня проще, потому что я привык к C #, и я новичок в синтаксисе SQL .. все, что требуется, это поместить оператор using, создать объект / или получить его обратно, изменить его и вернуть в таблицу .. легко!!
Ответ №2:
Вы создаете очень стандартную нормализованную структуру. Ваша Users
таблица будет отвечать за управление UserID
значениями, которые генерируются.
При вставке новых комментариев вам нужно справиться с двумя ситуациями:
- Пользователь существует и вошел в систему.
- Пользователь не существует и является анонимным.
В первой ситуации, когда вы вставляете комментарии, вам не нужно будет утруждать себя просмотром Users
таблицы. Предполагается, что UserID
у вас уже загружено (поскольку пользователь вошел в систему).
Во второй ситуации вам сначала потребуется ввести новую строку в Users
таблицу и вернуть UserID
ту, которую генерирует таблица (при условии, что вы используете столбец идентификаторов). Затем вы можете передать это значение в Comments
таблицу.
Следующий сценарий является примером решения второй ситуации:
DECLARE @userId int
INSERT INTO Users (Username, FirstName)
VALUES ('adamh', 'Adam')
SET @userId = SCOPE_IDENTITY()
INSERT INTO Comments(UserId, ThreadId, Comment)
VALUES (@userId, 1, 'My comment')
Если вы хотите продолжить свой текущий стиль кодирования, просто объедините значения в соответствующие части строки.
Однако, с такой четко определенной структурой, как у вас, я бы посоветовал использовать что-то вроде Entity Framework 4.0 или LINQ to SQL, что сокращает много работы, как только вы определили свои структуры.
Комментарии:
1. я думаю, мне нужно больше изучать sql, потому что я не понимаю, что означают все эти значения.. Установить, объявить… как вы думаете, есть ли способ преобразовать SQL в C #. я знаю, что это делается, когда вы используете атрибут таблицы [table] над классом, а затем используете класс .. но я забыл, как это делается