2014-03-04 79 views
0

我正在構建一個簡單的銷售點程序並處理允許最多3個搜索條件(InvoiceID,ClientName和ClientID)的「搜索發票」按鈕。這些是名爲「發票」的表中3列的名稱。在選擇查詢中的條件表達式中的數據類型不匹配c#訪問數據庫

InvoiceIDInt32類型的鍵列,ClientNameString類型的,ClientIDInt32類型。 ClientNameClientID搜索工作完美。

我的問題:如果在選擇查詢中包含InvoiceID,我會收到以下錯誤消息。我花了幾天的時間試圖找出答案。

錯誤:Database Error: Datatype mismatch in criteria expression.

你更有經驗的程序員可以幫助我嗎?謝謝!

String connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data" + @" Source=TESTDB.accdb"; 
      String tableName = "Invoicing"; 
      String query = String.Format("select * from [{0}] where", tableName); 
      //ADD IN SEARCH CRITERIA 
      int filled = 0; 
      if (invoiceBox.Text != "") { query += " InvoiceID='" + invoiceBox.Text+"'"; filled += 1; } 
      /*if (DateCheckBox.Checked == true) 
      { 
       if (filled>=1) { query += " and DateNTime='" + monthCalendar1.SelectionStart.ToString() + "'"; filled += 1; } 
       else { query += " DateNTime='" + monthCalendar1.SelectionStart.ToString()+ "'"; filled += 1; } 
      } 
      * */ 
      if (ClientNameBox.Text != "") //Doesnot work 
      { 
       if (filled >= 1) { query += " and Client='" + ClientNameBox.Text + "'"; filled += 1; } 
       else { query += " Client='" + ClientNameBox.Text + "'"; filled += 1; } 
      } 

      if (ClientIDBox.Text != "") //THIS search criteria works!!!! 
      { 
       if (filled >= 1) { query += " and ClientID='" + ClientIDBox.Text + "'"; filled += 1; } 
       else { query += " ClientID='" + ClientIDBox.Text + "'"; filled += 1; } 
      } 
      //CHECK IF SEARCH CRITERIA ARE PRESENT 
      if (filled < 1) { MessageBox.Show("At least One Search criteria above is required"); return; } 

      DataSet dsInvoicing = new DataSet(); 
      OleDbConnection conn = new OleDbConnection(connectionString); 
      try 
      { 
       //Open Database Connection 
       conn.Open(); 
       OleDbDataAdapter daInvoicing = new OleDbDataAdapter(query, conn); 
       //Fill the DataSet 
       daInvoicing.Fill(dsInvoicing, tableName); 
       //MessageBox.Show("dsInventory has "+dsInventory.Tables[0].Rows.Count+" search results"); 
       conn.Close(); 
       this.dataGridView1.DataSource = dsInvoicing.Tables[0]; 
      } 
      catch (OleDbException exp){ MessageBox.Show("Database Error: " + exp.Message.ToString());} 

需要更多信息?如果我沒有提供足夠的信息,我會發布更多信息。 數據庫信息或其他。

非常感謝所有程序員。

+0

也感謝您編輯格式丹麥語(我知道如何做到這一點)。 – burfor7

回答

0

看起來數據庫中InvoiceID的數據類型是某種數字類型。在查詢中,您將它視爲字符串。儘量不要用單引號包裝InvoiceID值。

+0

InvoiceID是Int32。我會同意你的看法,只不過我用ClientID使用了單引號,並且它每次都很完美。兩列InvoiceID和ClientID之間的唯一區別是InvoiceID是此表的關鍵列。你怎麼看? – burfor7

+0

我不明白爲什麼,但你是正確的丹麥人。我刪除了單引號,並且它可以正常工作 - 即使ClientID列也是Int32類型。奇怪的。謝謝。 – burfor7

相關問題