我刚刚开始为网络应用创建一个简单的广告资源扩展程序,而且我遇到了一个问题,我在更新表格中的行时遇到的问题已经存在在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();
}
}
非常感谢任何帮助或指示!
答案 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交换“=”符号时,函数按预期工作。感谢您的反馈!