質問

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を削除し、ユニークで変更されないと思われる列に割り当てます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top