2013-07-05 167 views
-4

我真的有一个C#项目上的数据库连接问题。我创造了我的数据库中的MS Access,每当我运行查询命令(方法已被分配给特定的按钮),我上adapter.Fill(dataset);行代码中的错误(OledbException was unhandled)说,OLEDB数据库连接

没有coinciden洛杉矶tipos de datos en laexpresiónde criterios。

OR

有一个在数据类型在条件表达式不匹配

namespace Repuesto 
{ 
    public partial class Form2 : Form 
    { 
     OleDbConnection connection = new OleDbConnection(); 
     OleDbCommand command = new OleDbCommand(); 
     DataSet dataset = new DataSet(); 
     OleDbDataAdapter adapter = new OleDbDataAdapter(); 

     string direction = Application.StartupPath + "\\Database1.accdb"; 

     public Form2() 
     { 
      InitializeComponent(); 
      InitializeData(); 
      FillDataGrid(); 
     } 

     public void InitializeData() 
     { 
      connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + direction; 
      connection.Open(); 
      command = connection.CreateCommand(); 
      connection.Close(); 
     } 

     private void FillDataGrid() 
     { 
      dataGridView1.DataSource = null; 
      dataset = new DataSet(); 
      connection.Open(); 
      command.CommandText = "select * from Consulta1 order by Id"; 
      adapter = new OleDbDataAdapter(command); 
      adapter.Fill(dataset); 
      connection.Close(); 
      dataGridView1.DataSource = dataset.Tables[0]; 
     } 

     public void DeleteRow() 
     { 
      dataset = new DataSet(); 
      connection.Open(); 
      command.CommandText = "delete from Consulta1 where Id = '" + dataGridView1.CurrentRow.Cells[0].Value.ToString() + "'"; 
      adapter = new OleDbDataAdapter(command); 
      adapter.Fill(dataset); 
      connection.Close(); 
      for (int i = 1; i < dataGridView1.Columns.Count; i++) 
      { 
       dataGridView1.Columns[i].Visible = true; 
      } 

      FillDataGrid(); 
     } 

     public void AddRow() 
     { 
      Form1 form1 = new Form1(); 

      var dateRecibido = DateTime.Parse(form1.dateTimePickerFechaRecibida.Value.ToString()).ToShortDateString(); 
      var dateSalido = DateTime.Parse(form1.dateTimePickerFechaSalida.Value.ToString()).ToShortDateString(); 

      dataset = new DataSet(); 
      connection.Open(); 
      command.CommandText = "insert into Consulta1([Fecha Recepcion], [Cantidad Recibido], [Denominación], [Ubicación], [Nº Referencía], [Proveedor], [Fecha Salida], [Cantidad Salida]) values " 
       + "('" + dateRecibido + "','" + form1.textBoxCantidadRecibido.Text + "','" + form1.textBoxDenominacion.Text 
       + "','" + form1.textBoxUbicacion.Text + "','" + form1.textBoxNoReferencia.Text + "','" + form1.textBoxProveedor.Text + "','" + dateSalido + "','" + form1.textBoxCantidadSalido.Text + "')"; 

      adapter = new OleDbDataAdapter(command);   
      adapter.Fill(dataset); 
      connection.Close(); 
      for (int i = 1; i < dataGridView1.Columns.Count; i++) 
      { 
       dataGridView1.Columns[i].Visible = true; 
      } 

      FillDataGrid(); 
     } 
    } 
} 

谁能帮助解释为什么我得到这个错误?谢谢!

+0

这是没有必要在这里呐喊您的问题,我们都可以读好:。你有三个单独的'adapter.Fill(数据集);'调用。哪一个抛出异常? (我怀疑它在'AddRow()'中,我的心理调试技巧告诉我这是因为你使用字符串连接来设置字段值,而不是正确地参数化你的SQL。)但是你需要真正确定问题,而且你有这些信息就在你面前(我们没有)。请[编辑]您的问题,以更具体地了解问题实际发生的位置。 –

+0

:-) ..他们都抛出同样的异常。我很抱歉,但我是数据库连接的新手,以及它的工作原理,如果我在代码中输入值,但是当输入通过文本框完成时,它会抛出异常,它真的强调我:-( – user2554925

+0

他们可以' t ** all **抛出异常,因为它们中至少有一个是简单的'SELECT *',并且它**不能**具有数据类型不匹配。再次检查。(再次),**不要使用'concatenation **'将值分配给列,使用'parameters'代替,在那里你可以为列指定正确的数据类型(在这里搜索'[c#]参数化查询'应该找到一些结果;事实上,前两个我看到似乎非常有用。) –

回答

0

任何人都可以帮助解释为什么我得到这个错误?谢谢!

如果您使用Microsoft Access(除非他们改变了这种在不同的版本,告诉访问它,你需要使用#,而不是一个日期。“在你的代码dateRecibido,你前面,结束时用了” (单引号)尝试改用#

正如你可以看到你传递一个字符串时,它可能是一个日期字段:

var dateRecibido = DateTime.Parse(form1.dateTimePickerFechaRecibida.Value.ToString()).ToShortDateString(); 
      var dateSalido = DateTime.Parse(form1.dateTimePickerFechaSalida.Value.ToString()).ToShortDateString(); 
+0

:..我检查了它...我解析到数据库的数据是相同的类型,但它仍然抛出异常。 – user2554925