2013-07-15 119 views
0

我收到以下错误插入SQL值到数据库表

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

,但我看不出什么毛病,被插入的值是从数据集包含另一个sql查询变量中的字段名称,然后将其插入另一个表中,如下所示:...

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

执行以上是代码翻倒的地方,并说明单词项目编号附近有错误?

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

+1

我编辑了自己的冠军的可能性。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

你可以尝试使用方括号中有空格的列([Order Number],[Item Number],...) –

+1

请请按照Steve的回答表示下面的内容。参数化查询总是一个更好的主意。他还确保使用'using'关键字正确处理您的'SqlCommand'和'SqlConnection'对象。 –

回答

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攻击