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
);

SQL Server Numeric,可以使用 C# 创建但不能更新

在插入查询中,您可以使用查询参数,这些参数负责确保十进制值的正确格式。

在更新查询中,使用字符串串联将十进制添加到查询中。最肯定的是,您当前的区域性不是将小数点的格式设置为点,而是逗号,从而导致语法不正确的查询。

所以你的分配

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

使用像插入中那样的参数化查询,这个问题 - 以及许多你甚至没有注意到的潜在其他问题 - 将消失。

相关文章: