SQL Server:更新不更新表C#没有错误

时间:2018-10-11 23:53:39

标签: c# sql-server

我正在尝试更新项目表:

public void updateDatabase(Item item)
{
    string sqlString = "UPDATE Items Set Quantity = '" + item.Quantity.ToString().Trim() + "' " + "WHERE ItemID = '" + item.ItemID.Trim() + "'";
    //string sqlStringParam = "UPDATE Items Set Quantity = @quant WHERE ItemID = @id";

    //Create & execute the update command
    using (SqlCommand sc = new SqlCommand(sqlString, mainConn))
    {
        //sc.Parameters.AddWithValue("@quant", item.Quantity);
        //sc.Parameters.AddWithValue("@id", item.ItemID);
        Console.WriteLine(sc.CommandText.ToString());
        UpdateDataSource(sc, table);
    }
    Console.WriteLine("done");
}

这会将命令发送到数据库类以执行查询:

protected bool UpdateDataSource(SqlCommand command, string table)
{
    bool success;

        try
        {
            if (mainConn.State != ConnectionState.Open)
            {
                mainConn.Open();
            }

            Console.WriteLine(command.CommandText);

            command.CommandType = CommandType.Text;
            Console.WriteLine(command.ExecuteNonQuery());

            mainConn.Close();
            success = true;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message + " " + e.StackTrace, "Error Updating Database");
            mainConn.Close();
            success = false;
        }
        finally
        {
        mainConn.Close();
        }
    return success;
}

如您所见,我已经尝试使用concat方法和参数化方法,但它们都不会更新表。这是尝试更新2个项目时的输出:

UPDATE Items Set Quantity = '4' WHERE ItemID = '1122'
UPDATE Items Set Quantity = '4' WHERE ItemID = '1122'
1
done
UPDATE Items Set Quantity = '9' WHERE ItemID = '1155'
UPDATE Items Set Quantity = '9' WHERE ItemID = '1155'
1
done

在我看来,似乎应该在更新表格。我什至从上面运行了一个完全复制的语句作为单个查询,它会更新表。

ExecuteNonQuery甚至返回1。

2 个答案:

答案 0 :(得分:1)

您可以使用跟踪,只需确保系统中已经安装了SQL Server Profiler。

SQL跟踪将告诉您在SQL Server中实时执行哪些命令。

SQL Server Profiler

  1. 文件-新建跟踪,然后选择服务器,身份验证模式提供用户名和密码,然后单击连接。
  2. 在跟踪属性中,转到“事件选择”选项卡。
  3. 点击显示所有事件显示所有列
  4. 点击列过滤器按钮
  5. 单击DatabaseID
  6. 单击“等于”,然后输入之前在Mangement Studio中生成的DB ID
  7. 点击确定,然后点击运行按钮

启用跟踪,然后执行您的应用程序,瞧!

这将在以后使用SQL Server时为您提供帮助;)

答案 1 :(得分:0)

看来问题出在我所使用的.mdf数据库文件的属性上。它设置为“始终复制”,而不是正确的“如果有新副本”设置。有趣的是,有人告诉我我不得不使用“始终复制”,但这似乎是不正确的。

感谢大家的帮助