【发布时间】:2016-07-05 17:10:54
【问题描述】:
只是一个简单的快速问题,我正在使用 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 参数也适用于 UPDATE 查询(但请使用 Add 而不是 AddWithValue)。
-
很简单。当像在 UPDATE 中那样将小数连接到字符串时,它会使用 ToString 方法转换为字符串。在您的语言环境中,ToString 方法生成一个字符序列,其中小数点由逗号表示。这会对您的 sql 文本造成严重破坏。解决方案很简单。像在 Add 中一样使用参数
-
为什么你在一种方法中使用参数而不是另一种方法?您的 Update 方法是 sql 注入的教科书示例。您需要在访问 bobby 表之前参数化此查询。 bobby-tables.com
标签: c# sql-server syntax numeric