.NET中的SQL Server更新无法正常工作,但返回1行已更新

时间:2012-10-09 15:51:07

标签: .net sql-server

我使用ExecuteNonQuery()使用显式SQL更新命令更新SQL Server数据库。但是,如果更新值与先前的更新匹配(例如,我将列从1更改为2,然后返回到1,然后再更改为2,对于同一行),即使{{1}更新也不会发生更新}返回1.

当两个连续的select语句相同时,我注意到与ExecuteNonQuery类似的问题;我通过设置一个等于唯一值的变量然后添加

来解决这个问题
ExecuteQuery

选择。但是,将此添加到更新不起作用。

以下是更新的.NET代码:

(注意AND the_unique_value = the_unique_value 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(); 为“1”。

第一次,TheKey为“1”; TheValue设置为1,更新成功。

第二次,ReturnValue为“2”; TheValue设置为1,更新成功。

第三次,ReturnValue再次为“1”; SQL命令现在与使用的命令相同 第一次。 TheValue设置为1,但不会进行更新。

我可以在表中添加一个列,该列将保存一个虚拟值,仅用于确保每个更新都有不同的SQL命令,但我不想用“不必要的”数据修改表。还有另一种方法可以让更新,因为缺乏更好的工作,每次都“提交”吗?

3 个答案:

答案 0 :(得分:1)

我会将sql代码更改为......

using (SqlConnection  conn = new SqlConnection("My Connection")) //just do a using block here
{
    SqlCommand cmd = new SqlCommand();

    //you should never use string concatination here... ever..
    cmd.CommandText = "update myTable set foo = @foo where bar = @bar";
    cmd.Parameters.Add("@foo", "foo");
    cmd.Parameters.Add("@bar", "bar");


    conn.Open();
    cmd.Connection = conn;
    cmd.ExecuteNonQuery();

}

如果匹配的话,返回的数字将为1。当然,如果命令中的数据相同,它将是相同的数据。

答案 1 :(得分:0)

如果要在转换期间将信息保留到数据库,则必须确实使用commit命令。如果您不提交,则不会在数据库上更新信息。 您不需要额外的行来获取额外的信息。

答案 2 :(得分:0)

事实证明,SQL Server与它无关 - 问题是,执行更新的.NET函数的AJAX调用从未实际调用该函数,而是执行与调用关联的“成功”代码。添加具有唯一值的虚拟参数来修复它。