を使用して明示的な SQL 更新コマンドで SQL Server データベースを更新していますExecuteNonQuery()
。ただし、更新値が以前の更新と一致する場合 (たとえば、同じ行に対して列を 1 から 2 に変更し、次に 1 に戻し、次に 2 に戻す)、ExecuteNonQuery
1 が返されても更新は行われません。
ExecuteQuery
2 つの連続する select ステートメントが同一である場合にも同様の問題があることに気付きました。変数を一意の値に設定してから追加することでこれを修正しました
AND the_unique_value = the_unique_value
セレクトへ。ただし、これを更新プログラムに追加しても機能しません。
更新用の .NET コードは次のとおりです。
(メモTheValue
とTheKey
は文字列です)
SqlConnection conn = new SqlConnection(SomeConnectionString);
conn.Open();
try
{
SqlCommand cmd = new SqlCommand
("update my_table "
+ "set the_value = '" + TheValue + "' "
+ "where the_key = '" + TheKey + "'"
, conn);
ReturnValue = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
ReturnValue = -2;
}
conn.Close();
これは 3 回呼び出されます。毎回、TheKey
「1」です。
初回TheValue
は「1」です。ReturnValue
が 1 に設定され、更新が成功します。
2回目TheValue
は「2」です。ReturnValue
が 1 に設定され、更新が成功します。
3 回目は、TheValue
再び「1」です。SQL コマンドは、最初に使用したものと同じになりました。ReturnValue
1 に設定されていますが、更新は行われません。
各更新に異なる SQL コマンドがあることを確認するためだけに使用されるダミー値を保持するテーブルに列を追加できますが、「不要な」データでテーブルを変更したくありません。より良い作業がないために、更新を毎回「コミット」する別の方法はありますか?