我有一个使用显式 SQL 更新命令更新 SQL Server 数据库ExecuteNonQuery()
。但是,如果更新值与之前的更新匹配(例如,我将列从 1 更改为 2,然后再更改为 1,然后再更改为 2,对于同一行),即使ExecuteNonQuery
返回 1,更新也不会发生。
ExecuteQuery
当两个连续的选择语句相同时,我注意到了类似的问题;我通过设置一个等于唯一值的变量然后添加来解决这个问题
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();
这被称为三遍。每次,TheKey
都是“1”。
第一次,TheValue
是“1”;ReturnValue
设置为1,更新成功。
第二次,TheValue
是“2”;ReturnValue
设置为1,更新成功。
第三次,TheValue
又是“1”;SQL 命令现在与第一次使用的相同。ReturnValue
设置为 1,但不进行更新。
我可以在表中添加一个列,该列将包含一个虚拟值,仅用于确保每个更新都有不同的 SQL 命令,但我不想用“不必要的”数据修改表。由于缺乏更好的工作,是否有另一种方法可以让更新每次都“提交”?