2013-03-16 58 views
1

我想用C#中插入一條記錄到MySQL數據庫,但我總是看到這個錯誤信息的手冊:錯誤的SQL語法;檢查corredponds你的MySQL服務器

你在你的SQL有錯誤語法;檢查對應於您的MySQL服務器版本 的手冊,以便在 'Order(idOrder,Quantity,Date,Menu_idMenu)附近使用正確的語法值VALUES(10002, '1','3/17/2013 12:00 'at line 1

這是代碼:

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    if (!row.IsNewRow) 
    { 
      com.CommandText = "INSERT INTO Order (idOrder, Quantity, Date, Menu_idMenu) VALUES (" + 10002 + ", '" +row.Cells[0].Value.ToString() + "', '"+DateTime.Today.ToString()+"', '" + row.Cells[1].Value.ToString() + "')"; 
      int insert = com.ExecuteNonQuery(); 
    } 
} 

這是什麼意思?

+0

_好的,這個答案沒有幫助你嗎? – 2013-03-16 19:21:11

回答

1

您在查詢中保留了關鍵字Order。引用它,並開心。

com.CommandText = "INSERT INTO `Order` (idOrder, Quantity, Date, Menu_idMenu) VALUES (" + 10002 + ", '" +row.Cells[0].Value.ToString() + "', '"+DateTime.Today.ToString()+"', '" + row.Cells[1].Value.ToString() + "')"; 

另外,最好使用參數。

0

Date and Order are reserved keywords on MySQL。

使用它們

使用''之間

com.CommandText = "INSERT INTO `Order` (idOrder, Quantity, Date, Menu_idMenu) VALUES (" + 10002 + ", '" +row.Cells[0].Value.ToString() + "', '"+DateTime.Today.ToString()+"', '" + row.Cells[1].Value.ToString() + "')"; 
並始終 parameterized queries。這種代碼打開了一個SQL Injection攻擊。

其實,你可以使用Date而不用引號。

MySQL允許一些關鍵字用作非引號標識符,因爲許多人以前使用過它們。

因爲,我建議你使用參數化查詢,在這裏您可以怎樣利用你的代碼中使用它;

com.CommandText = "INSERT INTO `Order` (idOrder, Quantity, Date, Menu_idMenu) VALUES (@idOrder, @Quantity, @Date, @Menu_idMenu)"; 

com.Parameters.AddWithValue("@idOrder", "10002"); 
com.Parameters.AddWithValue("@Quantity", row.Cells[0].Value.ToString()); 
com.Parameters.AddWithValue("@Date", DateTime.Today.ToString()); 
com.Parameters.AddWithValue("@Menu_idMenu", row.Cells[1].Value.ToString()); 
相關問題