2015-02-10 253 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使用位置参数而不是命名参数
相关问题