在C#中更新SQL Server数据库的数据方法

时间:2015-07-02 22:04:49

标签: c# sql .net sql-server

我刚刚开始为网络应用创建一个简单的广告资源扩展程序,而且我遇到了一个问题,我在更新表格中的行时遇到的问题已经存在在Product列中。

该方法非常类似于插入数据方法,该方法正在运行,因此我不确定发生了什么。这是我的代码:

static void ReplaceInventory(string product, int qty)
{
    using (SqlConnection con = new SqlConnection(
           "Data Source=TestSQL;Initial Catalog=TestInv;User ID=tester;Password=passwordtest;"))
    {
        con.Open();

        try
        {
            using (SqlCommand command = new SqlCommand(
                   "UPDATE Inventory SET Qty = @Qty WHERE Product = @Product", con))
            {
                command.Parameters.Add(new SqlParameter("@Qty", qty));
                command.Parameters.Add(new SqlParameter("@Product", product));
                command.ExecuteNonQuery();
            }
        }
        catch  
        {
            Console.WriteLine("Record not updated");
        }

        con.Close();
    }
}

但这有效:

static void AddInventory(string product, int qty)
{
    using (SqlConnection con = new SqlConnection(
           "Data Source=TestSQL;Initial Catalog=TestInv;User ID=tester;Password=passwordtest;"))
    {
        con.Open();

        try
        {
            using (SqlCommand command = new SqlCommand(
                   "INSERT INTO Inventory VALUES(@Product, @Qty)", con))
            {
                command.Parameters.Add(new SqlParameter("Product", product));
                command.Parameters.Add(new SqlParameter("Qty", qty));
                command.ExecuteNonQuery();
            }
        }
        catch
        {
            Console.WriteLine("Count not insert.");
        }

        con.Close();
    }
}

非常感谢任何帮助或指示!

3 个答案:

答案 0 :(得分:1)

在执行查询之前,尝试将命令类型设置为Text:

command.CommandType = System.Data.CommandType.Text

答案 1 :(得分:0)

您是否已调试代码并检查值是否正确传递?

尝试包含SqlDbType和尺寸。

command.Parameters.Add("@Product",SqlDbType.NVarChar, 20,product);

对于隐式转换,请尝试AddWithValue

command.Parameters.AddWithValue(new SqlParameter("@Qty", qty));
command.Parameters.AddWithValue(new SqlParameter("@Product", product));

根据 MSDN

  

AddWithValue替换了采用的SqlParameterCollection.Add方法   字符串和对象。带有一个字符串和一个的Add的重载   对象因为可能含糊不清而被弃用   SqlParameterCollection.Add带有String和a的重载   SqlDbType枚举值,其中传递带字符串的整数   可以解释为参数值或   对应的SqlDbType值。您可以随时使用AddWithValue   通过指定名称和值来添加参数。

请参阅此link以供参考。

但使用command.Parameters.Add更可靠,更安全,因为数据类型已定义,数据库不需要识别和转换正在发送的数据。

答案 2 :(得分:0)

想出来。我在数据库中创建的表中的“Product”列是“text”数据类型,因此它没有在UPDATE表达式中将“=”识别为有效。当我为LIKE交换“=”符号时,函数按预期工作。感谢您的反馈!