2014-01-09 3 views
1

Редактировать: Для тех, кто сталкивается с этой проблемой, не пропустите советы по использованию параметров вместо того, чтобы вставлять значения непосредственно в SQL-запросы.Невозможно сравнить элемент vb.net с номером доступа


я столкнулся с большой проблемой с моей vb.net проекта, я застрял с этим в течение недели

я имею элемент управления ComboBox, что мне нужно, чтобы сравнить с номером доступа, который моя база данных, чтобы получить какую-то информацию, но я только что получил сообщение об ошибке, независимо от того, какого формата я конвертировать мой COMBOBOX элемент, он не говорит, что мой тип данные 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

Смежные вопросы