ASP.NETアップデートGridViewステートメント
-
26-10-2019 - |
質問
VS2005 C#およびSQL Server 2005を使用しています。
私はグリッドビューを持っています、そしてこれは私の現在の更新ステートメントです:
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
記事を読んで、元の値を使用すると主キーの必要性をバイパスできるようになるため、同じタイプのクエリを状況に適用できるはずです。ただし、編集可能な識別キーを持つことは非常に悪いデザインであることを指摘する必要があります。他の多くの問題とともに、複数のレコードの更新を非常に簡単に終了できます。
他のヒント
グリッドビューの下には、レコードを更新するために、テーブルに少なくとも1つの一意のIDが必要です。ユーザーIDを編集する必要がある場合は、テーブルに固定キーが必要です。少なくともそれをuserkeyと名付けます。 GridViewは、その行へのポインターがある限り、データのみを編集および更新できると思います。それ以外の場合は、datakeynamesコレクションからuseridを削除し、ユニークで変更されないと思われる列に割り当てます。