Оператор ASP.NET Update GridView

Я использую VS2005 С# и SQL Server 2005.

У меня есть GridView, и это мой текущий оператор обновления:

UpdateCommand="UPDATE [UserData] SET [UserID] = @UserIDe, [Username] = @Username, [Age] = @Age, [MemberType]=@MemberType WHERE [UserID] = @UserID

Приведенный выше оператор обновит идентификатор строки пользователя на UserID.

Однако я хотел бы, чтобы переменная UserID была редактируемой, поэтому, если я отредактирую свою UserID при обновлении таблицы, строка не будет обновлена, потому что этот конкретный UserID может не существовать.

Как я могу использовать UpdateCommand и обновить строку, указав row number редактируемой строки?


person gymcode    schedule 01.12.2011    source источник


Ответы (2)


Это можно сделать, отслеживая все исходные значения. Visual Studio сделает это за вас, если вы используете мастер для создания операторов SQL и выбираете параметр «использовать оптимистичный параллелизм», как показано здесь.

Пример сгенерированного SQL можно найти здесь.

Пример кода со страницы:

UPDATE Products SET
    ProductName = @ProductName,
    UnitPrice = @UnitPrice
WHERE
    ProductID = @original_ProductID AND
    ProductName = @original_ProductName AND
    UnitPrice = @original_UnitPrice

Прочитав статью, вы сможете применить тот же тип запроса к своей ситуации, поскольку использование исходных значений позволит вам обойти необходимость в первичном ключе. Тем не менее, я должен отметить, что наличие редактируемого идентификационного ключа — очень плохой дизайн, поскольку вы не можете гарантировать его уникальность. вы можете очень легко закончить обновление более чем одной записи, наряду с целым рядом других проблем.

person David    schedule 01.12.2011

Под GridView находится таблица, которая должна иметь хотя бы один уникальный идентификатор для обновления записи. Если вам нужно отредактировать UserID, вам нужно иметь фиксированный ключ в вашей таблице. По крайней мере, назовите его как UserKey. Я думаю, что GridView может редактировать и обновлять данные только до тех пор, пока у вас есть указатель на эту строку. В противном случае удалите UserID из коллекции DataKeyNames и назначьте ему столбцы, которые, по вашему мнению, уникальны и не изменяются.

person Zaldy Baguinon    schedule 01.12.2011