Вопрос

Я использую VS2005 C# и 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 от редактированного ряда?

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top