C# 将SQL值插入到数据库表中
我得到以下错误 项目编号附近的语法不正确 但我没有发现任何错误,插入的值来自一个数据集,其中包含另一个sql查询的变量中的字段名,该sql查询正在循环,然后插入到另一个表中,就像这样C# 将SQL值插入到数据库表中,c#,sql,variables,insert,dataset,C#,Sql,Variables,Insert,Dataset,我得到以下错误 项目编号附近的语法不正确 但我没有发现任何错误,插入的值来自一个数据集,其中包含另一个sql查询的变量中的字段名,该sql查询正在循环,然后插入到另一个表中,就像这样 string strOrderDetails = "INSERT INTO Orders (Order Number, Item Number, Description, Price) " + "VALUES ('" + strOrderNo.Replace("'", "''").ToString
string strOrderDetails =
"INSERT INTO Orders (Order Number, Item Number, Description, Price) " +
"VALUES ('" + strOrderNo.Replace("'", "''").ToString() + "', '"
+ intItemNo + "', '"
+ strDesc.Replace("'", "''").ToString() + "', '"
+ decPrice + "')";
执行上述操作时,代码是否会出现错误,并在单词item number附近声明有错误
当列包含空格时,需要将其括在方括号或choosen数据库的其他分隔符中,因为它是一个整数,是否需要对
intItemNo
执行某些操作
但也就是说,请不要使用字符串连接来构建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();
}
正如您所注意到的,使用参数可以消除编写代码来处理输入值中的引号的需要,但也可以消除当列包含空格时发生攻击的可能性,您需要将其括在方括号或choosen数据库的其他分隔符中 但也就是说,请不要使用字符串连接来构建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();
}
正如您所注意到的,使用参数消除了编写代码来处理输入值中的引号的需要,同时也消除了攻击的可能性我已经编辑了您的标题。请参阅“”,其中一致意见是“不,他们不应该”。您可以尝试使用方括号列,其中包含空格([订单号],[项目号],…)请按照Steve的回答执行以下操作。参数化查询总是一个更好的主意。他还确保使用关键字正确处理您的
SqlCommand
和SqlConnection
对象。请参阅“”,其中一致意见是“不,他们不应该”。您可以尝试使用方括号列,其中包含空格([订单号],[项目号],…)请按照Steve的回答执行以下操作。参数化查询总是一个更好的主意。他还确保使用关键字正确处理SqlCommand
和SqlConnection
对象。