如何将参数传递给dataadapter?

时间:2019-04-08 19:15:29

标签: sql vb.net dataadapter sqlparameters sqlcommandbuilder

我有以下代码,我使用dataadapter从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)

1 个答案:

答案 0 :(得分:0)

嗯,好的,这段代码发生了很多奇怪的事情。

首先。用两个斜杠(//)不能在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之间也应该有一个空格,并且正如Mary在注释中提到的那样,此处没有必要使用%号,因为您没有做类似的事情。