2013-07-15 157 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攻擊