将SQL值插入数据库表

时间:2013-07-15 22:00:31

标签: c# sql variables insert dataset

我收到以下错误

  

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

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

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

执行上述操作时代码是否会出现并说明单词项目编号附近有错误?

我是否需要对intItemNo执行某些操作,因为它是一个整数?

1 个答案:

答案 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攻击的可能性