2014-01-09 23 views
1
比較vb.net項目

編輯:對於任何面臨這樣的問題,千萬不要錯過大約只有使用 參數,而不是直接插入值到SQL查詢的提示。不能與接入號碼


我面對我的vb.net項目的一個大問題,我又立刻陷入與此一週

我,我需要與接入號碼進行比較的組合框項目,其是我的數據庫檢索一些信息,但我只是得到一個錯誤,不管是什麼格式轉換我的組合框項目,它說我的數據類型是inconpatible與表達

下面是我的代碼的SQL查詢之一:

Dim dt1 As New DataTable 

'This query select some itens from a row that match with the selected combobox number 

Dim find1 As New OleDb.OleDbDataAdapter("SELECT Product, Number," _ 
& " Customer, Quantity, ProductionDate, AskDay, Pack, Company FROM RegOPE" _ 
& " WHERE Number ='" & CInt(mycombobox.SelectedItem) & "'", cn) 

'Ive tried SelectedItem, Item, Text, SelectedValue... 
'For conversion i tried parse, tryparse, conversion... 

cn.Open() 'Opens database connection 
find1.Fill(dt1) <- I got the error here 
cn.Close() 'Close database connect 
mydatagrid.DataSource = dt1 'Show the result in datagridview 

回答

1

數量的標準應該是沒有報價

Dim find1 As New OleDb.OleDbDataAdapter("SELECT Product, Number, " _ 
             & "Customer, Quantity, ProductionDate, AskDay, Pack, Company FROM RegOPE " _ 
             & "WHERE Number =" & CInt(mycombobox.SelectedItem), cn) 

不過還好始終使用參數:

Dim comm = New OleDb.OleDbCommand("SELECT Product, Number, " _ 
             & "Customer, Quantity, ProductionDate, AskDay, Pack, Company FROM RegOPE " _ 
             & "WHERE Number =?", cn) 

comm.Parameters.AddWithValue("unusedName", mycombobox.SelectedItem) 

Dim find1 As New OleDb.OleDbDataAdapter(comm) 
+0

THX,我刪除了報價,它的工作正常,我學習這種孤獨,我從來沒有看過有關的參數,我要改變這一切。 – Altrunox

1

在您的WHERE子句中,您是否嘗試刪除引號?如果你正在尋找一個號碼,他們不是必需的。

1

首先,不得不提的是,你真的應該使用的參數。您不應該將值直接連接到SQL命令字符串中。您的SQL命令字符串應該只包含這些值的參數名稱佔位符,然後您應該分別指定這些參數的值。

但是,如果你打算用這樣的命令來串聯值,該命令是一個字符串,而不是一個整數。它沒有什麼意義,只是一個字符串連接時(這需要首先把它從整數轉換成字符串)之前使用CInt到項目轉換爲整數。如果簡單地調用ToString將其轉換爲字符串而不是CInt會更有意義。此外,如果數據庫中的Number列鍵入的是數字而不是文本,則不應使用引號括起該值。

我建議您嘗試這樣的:

Dim find1 As New OleDb.OleDbDataAdapter("SELECT Product, Number," _ 
    & " Customer, Quantity, ProductionDate, AskDay, Pack, Company FROM RegOPE" _ 
    & " WHERE Number =" & mycombobox.SelectedItem.ToString(), cn) 

雖然建議是強烈的一個字,因爲我絕不會建議做它擺在首位的方式。使用參數化查詢!

+0

thx您的參數建議,我會改變我的代碼 – Altrunox