C# 将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

我得到以下错误

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

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

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
对象。