2017-02-13 18 views
0

Я пытаюсь выбрать имя клиента на основе выбранного кода из ComboBox. Когда я запускаю следующий код, я получаю сообщение о том, что нет значения для одного или нескольких требуемых параметров.SQL SELECT запрос не работает с параметрами, но отлично работает с конкатенацией

sql = "SELECT [Customer_Name] FROM [Customers] WHERE [Customer_Code] = @code" 
Dim cmd As New OleDb.OleDbCommand(sql, con) 
cmd.Parameters.Add("@code", OleDb.OleDbType.VarChar).Value = cmbCustomer.Text 

Dim da As New OleDb.OleDbDataAdapter(sql, con) 
Dim ds As New DataSet 

da.Fill(ds) 

txtCustomer.Text = ds.Tables(0).Rows(0).Item("Customer_Name") 

Однако, когда я запускаю тот же запрос, но без параметра, он отлично работает.

sql = "SELECT [Customer_Name] FROM [Customers] WHERE [Customer_Code] = '" & cmbCustomer.Text & "'" 
Dim cmd As New OleDb.OleDbCommand(sql, con) 

Dim da As New OleDb.OleDbDataAdapter(sql, con) 
Dim ds As New DataSet 

da.Fill(ds) 

txtCustomer.Text = ds.Tables(0).Rows(0).Item("Customer_Name") 

Есть ли что-то действительно очевидное, что я пропустил первым способом его выполнения? Если нет, то почему этот способ не работает?

+0

Если это будет 'cmd.Parameters.Add ("@ код", cmbCustomer.Text);'? –

+0

Я считаю, что лучше использовать Parameter.AddWithValue вместо – apomene

+0

Где вы пытаетесь запустить этот запрос? напрямую, из формы или отчета? –

ответ

4

Это из-за OleDbDataAdapter

Вы установки DataAdapter взять строку sql и подключение con, что означает, что cmd.Parameter не прошло с ней.

Таким образом, ваш код будет искать da.SelectCommand.Parameters.Add.

Вам необходимо либо

da.SelectCommand.Parameters.Add("@Code", OleDb.OleDbType.VarChar).Value = cmbCustomer.Text 

Или

Dim da As New OleDb.OleDbDataAdapter(cmd) 
+1

Вау, да, как глупо. Спасибо за объяснение, я буду более осторожен в следующий раз! – Harambe

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

  • Нет связанных вопросов^_^