SQL Server Numeric,可以使用 C# 创建但不能更新
本文关键字:创建 但不能 更新 可以使 Server Numeric SQL | 更新日期: 2023-09-27 17:55:29
只是一个简单的快速问题,我正在使用Microsoft SQL Server 2014 Express,现在我有两个函数来创建记录和更新包含数值的记录。
由于某种未知原因,我可以使用小数点后大于 0 的数字(如 50.50)的数值创建记录,但是,当尝试使用数值更新此记录时,它只是说我的语法在小数点后是错误的。所以 tl,dr(50.00 有效,50.50 或类似的东西,没有)。
我现在的问题是:我做错了什么?
这是我的两个函数:
public static void UpdateProduct(int id, string name, decimal price)
{
try
{
string query = "UPDATE dbo.Products SET Name = '" + name + "' , Price = " + price + " WHERE ProductID = " + id;
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonQuery();
}
catch (SqlException e)
{
Console.WriteLine(e.Message);
}
}
public static void AddProduct(string name, decimal price)
{
string query = "INSERT INTO dbo.Products (Name, Price) VALUES (@name, @price)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@name", name);
command.Parameters.AddWithValue("@price", price);
command.ExecuteNonQuery();
}
这是我为此值创建的 SQL
create Table Products
(
ProductID INT IDENTITY(1,1) PRIMARY key,
Name VARCHAR(255) NOT NULL,
Price NUMERIC(5,2) NOT NULL,
Active BIT DEFAULT 1
);
在插入查询中,您可以使用查询参数,这些参数负责确保十进制值的正确格式。
在更新查询中,使用字符串串联将十进制添加到查询中。最肯定的是,您当前的区域性不是将小数点的格式设置为点,而是逗号,从而导致语法不正确的查询。
所以你的分配
string query = "UPDATE dbo.Products SET Name = '" + name + "' , Price = " + price + " WHERE ProductID = " + id;
将产生类似
UPDATE dbo.Products SET Name = 'somename' , Price = 50,5 WHERE ProductID = 3
而不是
UPDATE dbo.Products SET Name = 'somename' , Price = 50.5 WHERE ProductID = 3
使用像插入中那样的参数化查询,这个问题 - 以及许多你甚至没有注意到的潜在其他问题 - 将消失。