0

我收到以下错误

项目编号附近的语法不正确

但我没有看到任何错误,插入的值来自一个数据集,该数据集包含来自另一个 sql 查询的变量中的字段名称,该查询正在循环然后插入到另一个表中,就像这样......

string strOrderDetails = 
    "INSERT INTO Orders (Order Number, Item Number, Description, Price) " +
    "VALUES ('" + strOrderNo.Replace("'", "''").ToString() + "', '"
             + intItemNo + "', '"
             + strDesc.Replace("'", "''").ToString() + "', '"
             + decPrice + "')";

在执行上述代码时,代码会发生故障并指出单词项目编号附近有错误?

intItemNo因为它是一个整数,所以我需要对它做些什么吗?

4

1 回答 1

4

当列包含空格时,您需要将其括在方括号或所选数据库的其他分隔符中

但话说回来,请不要使用字符串连接来构建 sql 命令,而始终是参数化查询。

string strOrderDetails = "INSERT INTO Orders ([Order Number], [Item Number]," + 
                         "Description, Price) VALUES (@ordNum, @temNo, @desc, @price";
using(SqlConnection cn = new SqlConnection(conString))
using(SqlCommand cmd = new SqlCommand(strOrderDetails, cn))
{
    cn.Open();
    cmd.Parameters.AddWithValue("@ordNum",strOrderNo);
    cmd.Parameters.AddWithValue("@itemNo",intItemNo);
    cmd.Parameters.AddWithValue("@desc",strDesc);
    cmd.Parameters.AddWithValue("@price", decPrice);
    cmd.ExecuteNonQuery();
}

如您所见,使用参数无需编写代码来处理输入值中的引号,同时也消除了Sql Injection攻击的可能性

于 2013-07-15T22:05:09.857 回答