','附近的语法不正确。错误

时间:2011-10-19 12:08:18

标签: asp.net sql syntax connection

尝试执行此操作时出现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,格式不兼容。但我无法弄清楚如何以兼容的格式获得它。

2 个答案:

答案 0 :(得分:3)

可能使用逗号格式化totalprice,例如3,14,其中SQL Server需要一个点,例如3.14

解决这个问题的一种方法是指定使用点的InvariantCulture:

var s = string.Format(
    CultureInfo.InvariantCulture, 
    "SELECT * from orders where OrderUserId = {0} and OrderTotalPrice = {0:0.0}",
    42, 3.1415);

这会在任何计算机上将价格格式化为3.1

顺便说一句,将变量作为参数传递会更好:

var com = new SqlCommand();
com.CommandType = CommandType.Text;
com.CommandText = "SELECT * from orders where OrderUserId = @userid " +
    "and OrderTotalPrice = @totalprice";
com.Parameters.AddWithValue("@userid", 42);
com.Parameters.AddWithValue("@totalprice", 3.1415);
var temporderid = com.ExecuteScalar();

然后您不必担心格式,因为您发送数据库为double,而不是格式化为字符串的双重格式。

答案 1 :(得分:0)

我想这是因为当您连接查询时,totalprice会转换为类似12,35的内容。

因此,我建议您使用参数化查询。例如。像这样:

var s = "SELECT * from orders " +
    " where OrderUserId = @userid and OrderTotalPrice = @totalprice";
var cmd = new SqlCommand(s, con);
cmd.Parameters.AddWithValue("userid", userid);
cmd.Parameters.AddWithValue("totalprice", totalprice);

int temporderid = Convert.ToInt32(cmd.ExecuteScalar());