1

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

4

2 に答える 2

1

GridViewの下には、レコードを更新するためにテーブルに少なくとも1つの一意のIDが必要です。UserIDを編集する必要がある場合は、テーブルに固定キーが必要です。少なくともUserKeyという名前を付けてください。GridViewは、その行へのポインターがある限り、データを編集および更新できると思います。それ以外の場合は、DataKeyNamesコレクションからUserIDを削除し、一意で変更されないと思われる列を割り当てます。

于 2011-12-01T04:30:51.840 に答える
1

これは、すべての元の値を追跡することで実行できます。ウィザードを使用して SQL ステートメントを生成し、次に示すように [オプティミスティック コンカレンシーを使用する] オプションを選択すると、Visual Studio がこれを行います

生成された SQL の例は、ここにあります。

ページのコード サンプル:

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

この記事を読むと、元の値を使用すると主キーの必要性を回避できるため、同じタイプのクエリを状況に適用できるはずです。ただし、編集可能な識別キーを持つことは、一意であることを保証できないため、非常に悪い設計であることを指摘しておく必要があります。他の多くの問題とともに、複数のレコードの更新を非常に簡単に終了できます。

于 2011-12-01T04:41:16.913 に答える