2015-05-31 3 views
1

Это новая концепция для меня, и я не могу понять, что вызывает ошибку. Я пытаюсь заполнить элемент управления datagridview из одного поля в базе данных Access (из поля комбо и текста источник). Использование литералов работает, но не с параметром.Сбой SQL-параметра

Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Backend & ";Persist Security Info=False;") 
    Dim command As New OleDbCommand("Select Year from tblTest ", conn) 
    Dim criteria As New List(Of String) 

    If Not cboYear.Text = String.Empty Then 
     criteria.Add("Year = @Year") 
     command.Parameters.AddWithValue("@Year", cboYear.Text) 
    End If 

    If criteria.Count > 0 Then 
     command.CommandText &= " WHERE " & String.Join(" AND ", criteria) 
    End If 

    Dim UserQuery As New OleDbDataAdapter(command.CommandText, conn) 
    Dim UserRet As New DataTable 
    UserQuery.Fill(UserRet) 

    With frmDGV.DataGridView2 
     .DataSource = UserRet 
    End With 

    frmDGV.DataGridView2.Visible = True 
    frmDGV.Show() 

Попытка заполнить строковое представление исключений «Нет значения для одного или нескольких требуемых параметров».

Значение command.CommandText в этой точке «Выбрать Год от tblTest КУДА Year = @Year»

+0

выглядит как VB. Добавьте соответствующий тег на свой вопрос. –

+0

Пробовал, но это не позволило мне – David

ответ

2

Ваш экземпляр OleDbDataAdapter был создан с помощью двух параметров текста запроса и соединения.

Dim UserQuery As New OleDbDataAdapter(command.CommandText, conn) 

В этом случае DataAdapter вообще не знает параметров.

Вместо этого используйте конструктор с пареметром типа OleDbCommand.

Dim UserQuery As New OleDbDataAdapter(command) 

В программном коде экземпляр OleDbCommand уже связан с подключением

+0

Идеальное решение, спасибо. Нельзя повышать (репутацию) – David

+0

Но вы можете принять ответ. – abto