2013-07-05 79 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