2015-02-10 325 views
-1

這是什麼代碼的錯誤MS Access數據庫連接

connect = new OleDbConnection(coo); 
connect.Open(); 
command.Connection = connect; 
DataTable dt = new DataTable(); 
OleDbDataAdapter ODA = new OleDbDataAdapter("SELECT * FROM Items where itemno = '" + textBox1.Text + "'", connect); 
ODA.Fill(dt); 
dataGridView1.DataSource = dt; 

我運行後,這是發生了什麼事

「標準表達式中數據類型不匹配」

我該怎麼辦?

+0

是'Itemno'在數據庫中的整數..?如果是這樣,那麼錯誤就是告訴你這個問題。 'strings textBox1.Text'是數據類型'string','itemno'是'Integer',所以你需要'(int)強制轉換或者使用Convert.ToInt32(textBox1.Text)'這是非常基本的。您應該閱讀並保存在您的Disposal中[C#基礎 - 數據類型](http://www.tutorialspoint.com/csharp/csharp_data_types.htm) – MethodMan 2015-02-10 18:54:18

回答

0

itemno是整數,這就是爲什麼你會收到錯誤,刪除值的單引號。 但是,更重要的是,使用參數與您的查詢。你很容易SQL Injection

using (var connect = new OleDbConnection(coo)) 
{ 
    using (OleDbCommand command = new OleDbCommand("SELECT * FROM Items where itemno = ?", connect)) 
    { 
     command.Parameters.Add(new OleDbParameter("@p1", OleDbType.Integer) 
     { 
      Value = textBox1.Text 
     }); 
     DataTable dt = new DataTable(); 
     OleDbDataAdapter ODA = new OleDbDataAdapter(command); 
     ODA.Fill(dt); 
     dataGridView1.DataSource = dt; 
    } 
} 

幾件事情加:

  • 附上您的命令和連接對象using statement
  • 您不必使用DataAdapter顯式打開連接。它將打開到數據庫的連接。
  • OLEDB使用位置參數而不是命名參數
相關問題