トップ回答者
ObjectDataSourceを利用した更新で、更新前の値を取得するには

質問
-
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();
}
}
回答
-
fjdsskl さんからの引用
更新は出来ていますが、更新前のデータの値をこのClassの中で取得したいのですが出来ません。
ConflictDetectionをCompareAllValuesにし、OldValuesParameterFormatStringを設定して下さい。例えば、original_{0}とします。こうすれば、original_yesnoとして取得できます。fjdsskl さんからの引用
さらに、正常に更新されたかどうかの判断として
affectedCnt をラベルコントロールへ渡し表示したいのですが、Classからは、ラベルが見えず、
ビルドでエラーとなります。Sessionも使用出来ず、エラーとなります。
この点についても、何か方法はありますでしょうか?
MyUpdateMethodでaffectedCntをReturnするようにして下さい。
そうすれば、ObjectDataSourceのUpdatedイベントで、ObjectDataSourceStatusEventArgsからReturnValueで取得できます。
すべての返信
-
fjdsskl さんからの引用
更新は出来ていますが、更新前のデータの値をこのClassの中で取得したいのですが出来ません。
ConflictDetectionをCompareAllValuesにし、OldValuesParameterFormatStringを設定して下さい。例えば、original_{0}とします。こうすれば、original_yesnoとして取得できます。fjdsskl さんからの引用
さらに、正常に更新されたかどうかの判断として
affectedCnt をラベルコントロールへ渡し表示したいのですが、Classからは、ラベルが見えず、
ビルドでエラーとなります。Sessionも使用出来ず、エラーとなります。
この点についても、何か方法はありますでしょうか?
MyUpdateMethodでaffectedCntをReturnするようにして下さい。
そうすれば、ObjectDataSourceのUpdatedイベントで、ObjectDataSourceStatusEventArgsからReturnValueで取得できます。