我使用的是VS2005 C#和SQL Server 2005。
我有一个GridView,这是我当前的Update语句:
UpdateCommand="UPDATE [UserData] SET [UserID] = @UserIDe, [Username] = @Username, [Age] = @Age, [MemberType]=@MemberType WHERE [UserID] = @UserID
上述语句将按UserID
更新用户行标识。
但是,我希望变量UserID
可以编辑,因此如果我在更新表时编辑UserID
,则不会更新该行,因为特定的UserID
可能不会存在。
如何使用UpdateCommand
并通过识别已编辑行的row number
来更新行?
答案 0 :(得分:1)
在GridView下面,表格需要至少有一个唯一ID才能更新记录。如果需要编辑UserID,则需要在表中使用固定密钥。至少将其命名为UserKey。我认为只要你有一个指向该行的指针,GridView就只能编辑和更新数据。否则,从DataKeyNames集合中删除UserID,并为其分配您认为唯一且不会更改的列。
答案 1 :(得分:1)
这可以通过跟踪所有原始值来完成。如果您使用向导生成SQL语句,Visual Studio将为您执行此操作,并选择“使用乐观并发”选项,如图所示here.
可以找到生成的SQL的示例here。
页面中的代码示例:
UPDATE Products SET
ProductName = @ProductName,
UnitPrice = @UnitPrice
WHERE
ProductID = @original_ProductID AND
ProductName = @original_ProductName AND
UnitPrice = @original_UnitPrice
通读本文,您应该可以对您的情况应用相同类型的查询,因为使用原始值可以避免使用主键。但是,我应该指出,拥有可编辑的识别密钥是一种非常糟糕的设计,因为您不能保证它是唯一的。您可以非常轻松地结束更新多条记录以及其他一系列问题。