none
GridViewの更新ボタンをObjectDataSourceの更新処理で実行したい RRS feed

  • 質問

  • UPDATE         社員_正規化
    SET                氏名 = @氏名,   部署コード = @部署コード,
                           役職コード = @役職コード

    WHERE           (id = @id)

    GridViewで更新ボタンを押したとき

    WHERE以降がないと全件更新してしまいます。

    idはキー項目なので条件に足したのですがうまくいきません。

    どこが間違っているのでしょうか。

    Updateメソッドは

    UpdateQuery(String 氏名, Nullable<Int32> 部署コード, Nullable<Int32> 役職コード, Int32 id)、戻り値 Int32

    なっています。

    テーブルは、id、氏名、部署コード、役職コードでできています。

    2011年4月13日 17:33

回答

  • @idにきちんと値が渡っていない可能性があります。UpdateParametersの設定は正しくされていますか?

    #テストで
    WHERE           (id = @id)
    ではなく、
    WHERE           (id = 5)
    とするとid=5のレコードが更新されるのであれば、やはり@idが0か何かなのでしょう。
    例えば、
    役職コード = @id
    として役職コードに何か入るかで@idの値を知ることができると思います。SQL Serverであれば、可能であればSQL Server Profilerを使って実際に発行されているSQLを確認するのが確実ですし、安全です。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年4月14日 5:28
    モデレータ

すべての返信

  •  where句を足されて@idの値が指定されない場合は例外が発生すると思いますが、うまくいかないとは依然として全件が更新されるのでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年4月14日 1:11
    モデレータ
  • ありがとうございます。

    WHERE入れると何も更新されなくなります。

    2011年4月14日 4:57
  • @idにきちんと値が渡っていない可能性があります。UpdateParametersの設定は正しくされていますか?

    #テストで
    WHERE           (id = @id)
    ではなく、
    WHERE           (id = 5)
    とするとid=5のレコードが更新されるのであれば、やはり@idが0か何かなのでしょう。
    例えば、
    役職コード = @id
    として役職コードに何か入るかで@idの値を知ることができると思います。SQL Serverであれば、可能であればSQL Server Profilerを使って実際に発行されているSQLを確認するのが確実ですし、安全です。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年4月14日 5:28
    モデレータ
  • 問題点が特定できないのでハズレかもしれませんが・・・

    GridView に DataKeyNames="id" の定義がありますか? それがないと id の
    値が ObjectDataSource に渡されません。


    情報が少なすぎです。どういう情報を提供すれば回答者が状況を把握し問題点
    を特定できるか考えて書いていただければと思います。

    2011年4月14日 11:46