none
ObjectDataSourceを利用した更新で、更新前の値を取得するには RRS feed

  • 質問

  • ASP.NET 2.0

    ObjectDataSourceとGridViewを配置し、
    ObjectDataSourceの「データソースの構成」のUpdateのメソッドの選択で、下記の作成したClassを指定しています。
    更新は出来ていますが、更新前のデータの値をこのClassの中で取得したいのですが出来ません。
    下記のClassでは「yesno」のフィールドを更新していますが、
    更新前の「yesno」のフィールドの値を WHERE句の条件に追加して、以下のようにしたいのです。
    string sql = "UPDATE [MyTable] SET [yesno] = @yesno WHERE [Keyfld] = @Keyfld AND  [yesno] = @yesnoのOLD値";

    引数からは、変更後の値しか取得出来ないようなのですが、何か、方法はありますか?

    さらに、正常に更新されたかどうかの判断として
    affectedCnt をラベルコントロールへ渡し表示したいのですが、Classからは、ラベルが見えず、
    ビルドでエラーとなります。Sessionも使用出来ず、エラーとなります。
    この点についても、何か方法はありますでしょうか?

    --------- Class ---------------------------------

        public static void MyUpdateMethod(bool yesno, string Keyfld)
        {
            string sql = "UPDATE [MyTable] SET [yesno] = @yesno WHERE [Keyfld] = @Keyfld";
            using (SqlConnection myConnection =
                new
            SqlConnection(ConfigurationManager.ConnectionStrings["MyDBConnectionString1"].ConnectionString))
            {
                SqlCommand myCommand = new SqlCommand(sql, myConnection);
                myCommand.Parameters.Add(new SqlParameter("@yesno", yesno.ToString()));
                myCommand.Parameters.Add(new SqlParameter("@Keyfld", Keyfld));

                myConnection.Open();
                int affectedCnt = myCommand.ExecuteNonQuery();
                myConnection.Close();
            }
        }

    2006年9月23日 7:04

回答

  •  fjdsskl さんからの引用

    更新は出来ていますが、更新前のデータの値をこのClassの中で取得したいのですが出来ません。

    ConflictDetectionをCompareAllValuesにし、OldValuesParameterFormatStringを設定して下さい。例えば、original_{0}とします。こうすれば、original_yesnoとして取得できます。

     fjdsskl さんからの引用

    さらに、正常に更新されたかどうかの判断として
    affectedCnt をラベルコントロールへ渡し表示したいのですが、Classからは、ラベルが見えず、
    ビルドでエラーとなります。Sessionも使用出来ず、エラーとなります。
    この点についても、何か方法はありますでしょうか?

    MyUpdateMethodでaffectedCntをReturnするようにして下さい。
    そうすれば、ObjectDataSourceのUpdatedイベントで、ObjectDataSourceStatusEventArgsからReturnValueで取得できます。

    2006年9月24日 1:16
    モデレータ

すべての返信

  •  fjdsskl さんからの引用

    更新は出来ていますが、更新前のデータの値をこのClassの中で取得したいのですが出来ません。

    ConflictDetectionをCompareAllValuesにし、OldValuesParameterFormatStringを設定して下さい。例えば、original_{0}とします。こうすれば、original_yesnoとして取得できます。

     fjdsskl さんからの引用

    さらに、正常に更新されたかどうかの判断として
    affectedCnt をラベルコントロールへ渡し表示したいのですが、Classからは、ラベルが見えず、
    ビルドでエラーとなります。Sessionも使用出来ず、エラーとなります。
    この点についても、何か方法はありますでしょうか?

    MyUpdateMethodでaffectedCntをReturnするようにして下さい。
    そうすれば、ObjectDataSourceのUpdatedイベントで、ObjectDataSourceStatusEventArgsからReturnValueで取得できます。

    2006年9月24日 1:16
    モデレータ
  •  trapemiya様、有難うございます。

    「更新前のデータの値」も「更新件数」も教えて頂いた方法で、

    バッチリできました。すごいですね~。

    2006年9月24日 3:31