2015-07-19 64 views
-2

我使用C#OleDb創建訂單窗體,並且試圖將訂單窗體中的組合框的大小值放入數據庫時​​遇到問題。 導致此問題的代碼如下。插入到語句中的語法錯誤C#OleDb

private void btn_Save_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      connection.Open(); 
      OleDbCommand command = new OleDbCommand(); 
      command.Connection = connection; 
      command.CommandText = "insert into OrderForm(Size) values ('" + sizeBox.Text + "')"; 
      command.ExecuteNonQuery(); 
      MessageBox.Show("Order Inserted into Database"); 
      connection.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error " + ex); 
     } 
    } 

這是導致我的問題的代碼的唯一的一塊,我已經比起來,我已經註釋掉,以確保語法是正確的代碼,我的其他的CommandText線,它看起來好對我來說。我也檢查過,以確保列在commandText代碼中的字段名稱和實際數據庫中的字段是正確的並且是。任何有關這個問題的幫助將不勝感激。乾杯

編輯:語法錯誤的代碼是給我 Syntax Error

+0

難道是大小是數值類型(例如整數)?如果是這樣 - 在查詢中不需要單引號 – dotnetom

+1

「Size」的數據類型是什麼,「sizeBox.Text」的值是多少? –

+3

也從來沒有像你剛剛那樣連接查詢,因爲你很容易受到[SQL注入攻擊](https://en.wikipedia.org/wiki/SQL_injection) – dotnetom

回答

3

SIZE是一個保留字。你不能把它作爲一個字段名,除非你將其括在方括號,所以你的代碼應該從封閉在方括號大小我已經改變了幾件事情寫成

private void btn_Save_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string sqlText = "insert into OrderForm([Size]) values (?)"; 
     using(OleDbConnection connection = new OleDbConnection(.....)) 
     using(OleDbCommand command = new OleDbCommand(sqlText, connection)) 
     { 
      connection.Open(); 
      command.Parameters.Add("@p1", OleDbType.VarWChar).Value = sizeBox.Text; 
      int rowsAdded = command.ExecuteNonQuery(); 
      if(rowsAdded > 0) 
       MessageBox.Show("Order Inserted into Database"); 
      else 
       MessageBox.Show("No Order added to the Database"); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error " + ex.Message); 
    } 
} 

的一部分。

第一個每次你到達一個數據庫時,你都會使用using語句圍繞連接和其他一次性對象。這樣可以避免內存泄漏,並且在不需要時可以使用昂貴的資源。

第二個查詢是參數化的,通過這種方式可以更清楚地知道你在做什麼,避免sql注入和正確解析值的問題。