Как передать параметры в dataadapter? - PullRequest
0 голосов
/ 08 апреля 2019

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

"Необходимо объявить скалярную переменную" @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)

1 Ответ

0 голосов
/ 08 апреля 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...