【发布时间】:2011-10-19 12:08:17
【问题描述】:
当我尝试执行此操作时遇到 SQL 错误:
public static int GetOrderId(decimal totalprice, int userid)
{
string s = "SELECT * from orders where OrderUserId = " + userid + " and OrderTotalPrice = " + totalprice;
cmd = new SqlCommand(s, con);
int temporderid = Convert.ToInt32(cmd.ExecuteScalar());
return temporderid;
}
据我所知,因为它返回 OrderTotalPrice,格式不兼容。但我不知道如何以兼容的格式获取它。
【问题讨论】:
-
您应该使用参数化查询(尽管至少在这种情况下,这两个值至少是保证数字)
-
SQL 命令与参数连接后是什么样子的?基本上是执行命令之前
s的值。您通常也不能将 ExecuteScalar 与SELECT *查询一起使用。 ExecuteScalar 期望返回单个值而不是一行数据。 -
所以改为阅读器可以解决问题吗?
-
刚刚改成:string s = "SELECT * from orders where OrderUserId = " + userid + " and OrderTotalPrice = " + totalprice; cmd = new SqlCommand(s, con);阅读器 = cmd.ExecuteReader(); int temporderid = (int)reader.GetSqlInt32(0);返回时间顺序;但仍然得到同样的错误,因为格式化
-
几点建议 1) 使用存储过程,您可以获得性能和安全性等奖励。 2) 如果您只想返回 1 个值,请执行 SELECT TOP 1 * 而不是 select *。我不确定您的错误是否是因为您选择了多条记录但试图将它们放入一个只能包含 1 个值的 int 变量中。
标签: asp.net sql syntax connection