Мне нужна помощь с таблицами SQL и данных - PullRequest
0 голосов
/ 13 мая 2011

я создаю сайт мини-форума ... и я создал несколько таблиц.

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).Как я могу вставить комментарий и уведомить другую таблицу, чтобы не увеличивать UserID на 1. На самом деле я хочу, чтобы UserID оставался неизменным для каждого пользователя, отправляющего комментарий.

Как мне это сделать??мне нужно вставить несколько полей в одну таблицу (комментарии), но держать другие таблицы в курсе, что на самом деле это тот же пользователь, который отправил комментарий.

Примечание: я не знаю ни одного vb, только c #, ия использую visual studio 2010. asp.net

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Кстати, способ вставки является проблемой безопасности, вы можете получить SQL-инъекцию ...

Используйте system.data.sqlclient.sqlparameters для передачи значений.

0 голосов
/ 13 мая 2011

Вы создаете очень стандартную нормализованную структуру.Ваша таблица Users будет отвечать за управление генерируемыми значениями UserID.

При вставке новых комментариев вам нужно справиться с двумя ситуациями:

  1. Пользователь существует изарегистрирован.
  2. Пользователь не существует и является анонимным.

В первой ситуации, когда вы вставляете комментарии, вам не нужно беспокоиться, глядя на 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, чтоотрежет много сантехники, как только вы определили свои структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...