首先,您应该使用参数化 SQL,而不是将参数直接放入 SQL 中。此外,您应该在完成后使用using
语句关闭命令和连接。哦,SqlConnection
为每个操作创建一个新的。所以像:
public int GetProductPrice(string productName)
{
// Quite possibly extract the connection creation into a separate method
// to call here.
using (var conn = new SqlConnection(...))
{
conn.Open();
using (var command = new SqlCommand(
"SELECT ProductPrice FROM Products WHERE ProductName = @ProductName",
conn))
{
command.AddParameter("@ProductName", SqlDbType.VarChar)
.Value = productName;
object price = command.ExecuteScalar();
// And you'd do the casting here
}
}
}
接下来,我们不知道ProductPrice
字段的类型。可能是您收到了long
退货,也可能是decimal
. 找出最简单的方法就是使用:
object tmp = cmd.ExecuteScalar();
...然后查看调试器。还要查看数据库中字段的类型——这应该能真正告诉你会发生什么。查看SqlDbType
两者之间映射的枚举。