SqlParameterCollection只接受非null的SqlParameter类型对象,而不接受String对象

时间:2012-10-04 09:04:46

标签: asp.net vb.net parameterized

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim ds As DataSet = New DataSet()
    Dim param As SqlParameter = New SqlParameter("@user_code", SqlDbType.Char, 4)
    param.Value = "0016"
    Const sqlstr As String = "select sectors.sector_code,sector_name   from user_sectors inner join sectors on user_sectors.sector_code = sectors.sector_code  where user_code = @user_code  and sectors.sector_code not in ('z')"
    Dim da As SqlDataAdapter = New SqlDataAdapter(sqlstr, _con)
    da.SelectCommand.Parameters.Add("@user_code")
    da.Fill(ds)
    ddl.DataValueField = "sector_code"
    ddl.DataTextField = "sector_name"
    ddl.DataSource = ds.Tables(0)
    ddl.DataBind()    
End Sub

3 个答案:

答案 0 :(得分:2)

我猜行

da.SelectCommand.Parameters.Add("@user_code")

应该是

da.SelectCommand.Parameters.Add(param)

答案 1 :(得分:1)

这是因为它是SqlParameterCollection而不是string集合。

如果您调用适当的Add重载,如果有足够的信息,它将为您创建实例。

或许这样,

Dim newParam = da.SelectCommand.Parameters.Add("@user_code", sqlDbType.Char, 4)
newParam.Value = "0016"

或者,替换这样的几行

da.SelectCommand.Parameters.Add( _
    New SqlParameter("@user_code", SqlDbType.Char, 4) With { .Value = "0016" }))

或者,如果您想使用多行,只需添加

即可
da.SelectCommand.Parameters.Add(param)

答案 2 :(得分:1)

您应该在param

中传递add
da.SelectCommand.Parameters.Add(param)