Как передать параметры в адаптер данных?

У меня есть код ниже, который я использую для выбора данных из таблицы базы данных sql с помощью адаптера данных, но я выдаю ошибку:

"Необходимо объявить скалярную переменную" @UserName"

Где ошибка в коде????

Я пробовал приведенный ниже код, который выдает ошибку «Необходимо объявить скалярную переменную» @UserName»

 Dim Query as string ="SELECT *FROM UserLogins WHERE [Login Name]= 
 @Username  AND Password=@passcode"

 // add parameters to dataadapter select command
 SQL.da.SelectCommand.Parameters.AddWithValue("@Username", "%" + 
 txtuserName.Text + "%")
 SQL.da.SelectCommand.Parameters.AddWithValue("@passcode", "%" + 
 txtpasslogin.Text + "%")

  //execute query and fill dataset
        da = New SqlDataAdapter(Query,Con)           
        cb = New SqlCommandBuilder(da)
        ds = New DataSet
        da.Fill(ds)
 Datagridview1.Datasource=ds.tables(0)

person Community    schedule 08.04.2019    source источник
comment
Вы добавляете параметры в объект da.SelectCommand, затем создаете новый объект da, так что нет, параметров больше нет.   -  person LarsTech    schedule 08.04.2019
comment
спасибо за комментарий, не могли бы вы использовать код, чтобы уточнить свой ответ.   -  person    schedule 08.04.2019
comment
Попробуйте добавить параметры после создания нового адаптера.   -  person LarsTech    schedule 08.04.2019
comment
Для чего нужны знаки %? Это не похоже на =.   -  person Mary    schedule 08.04.2019
comment
@Мария Имя пользователя и пароль? Э, достаточно близко, заходи.   -  person LarsTech    schedule 08.04.2019


Ответы (1)


Ну ладно, с этим кодом происходит много странных вещей.

Первый. Две косые черты (//) — это не то, как комментарии делаются в VB.NET. Это синтаксис С#. Вместо этого используйте одинарную кавычку (')

Далее, ошибка, которую вы получили, является ошибкой, исходящей от SQL Server.

«Необходимо объявить скалярную переменную @UserName»

LarsTech специально упомянул в своем комментарии, что предоставленный вами код сначала добавляет переменные, а затем сразу же создает новый экземпляр SQLDataAdapter. Если вы измените свой код, чтобы сначала создать адаптер данных, а затем заполнить переменные, вы должны получить лучший результат.

Я не собираюсь предполагать, что переменные da, cb и ds уже объявлены, но переменная Con где-то объявлена.

Dim Query as string ="SELECT * FROM UserLogins WHERE [Login Name]=     
@Username  AND Password=@passcode"

'Note that I moved these two lines up here and made sure they were properly declared
Dim da as New SqlDataAdapter(Query,Con)           
Dim cb as New SqlCommandBuilder(da)

' add parameters to dataadapter select command
da.SelectCommand.Parameters.AddWithValue("@Username", "%" + 
    txtuserName.Text + "%")
da.SelectCommand.Parameters.AddWithValue("@passcode", "%" + 
    txtpasslogin.Text + "%")

' execute query and fill dataset

ds = New DataSet
da.Fill(ds)
Datagridview1.Datasource=ds.tables(0)

Наконец, в вашем операторе sql также должен быть пробел между * и FROM, и, как упоминала Мэри в комментариях, знаки% здесь не нужны, потому что вы не делаете этого.

person Michael Payne    schedule 08.04.2019