我收到以下错误
语法在项目编号附近不正确
但是我没有看到任何错误,插入的值来自一个数据集,该数据集包含来自另一个sql查询的变量中的字段名称,该查询正在循环,然后插入到另一个表中,如此....
string strOrderDetails =
"INSERT INTO Orders (Order Number, Item Number, Description, Price) " +
"VALUES ('" + strOrderNo.Replace("'", "''").ToString() + "', '"
+ intItemNo + "', '"
+ strDesc.Replace("'", "''").ToString() + "', '"
+ decPrice + "')";
执行上述操作时代码是否会出现并说明单词项目编号附近有错误?
我是否需要对intItemNo
执行某些操作,因为它是一个整数?
答案 0 :(得分: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攻击的可能性