【问题标题】:Must declare the scalar variable "@??????"必须声明标量变量“@??????”
【发布时间】:2016-01-12 10:01:47
【问题描述】:

我正在使用以下 SQL 语句:

      Dim strSql5 As String = "SELECT  * FROM dbo.ontledings " & _
                                " where plaasblok =  @plaasblokparsversoeke " & _
                                " and analisedatum  =  @laastedatum"


    cnn.Open()
    Dim aksie2 As New SqlClient.SqlCommand(strSql5, cnn)
    aksie2.Parameters.Add("@plaasblokparsversoeke", SqlDbType.VarChar).Value = plaasblokparsversoeke
    aksie2.Parameters.Add("@laastedatum", SqlDbType.Date).Value = laastedatum
    aksie2.ExecuteNonQuery()
    cnn.Close()

我想像这样填写一个数据表:

    Dim dtb5 As New DataTable
    dtb5.Clear()

    Using cnn As New SqlConnection("Data Source=GIDEON-E-LAPTOP\SQLEXPRESS2014;Initial Catalog=SkeduleringDatabasis;Integrated Security=True")
        cnn.Open()

        Using dad5 As New SqlDataAdapter(strSql5, cnn)

            dad5.Fill(dtb5)
        End Using
        cnn.Close()
    End Using

我收到以下错误消息:必须声明标量变量“@plaasblokparsversoeke”

我不知道在哪里以及如何声明标量变量。

错误发生在以下行:dad5.Fill(dtb5)

问候

【问题讨论】:

    标签: sql-server vb.net


    【解决方案1】:

    你需要添加类似的参数

    cmd.Parameters.Clear() 
    cmd.Parameters.AddWithValue("@plaasblokparsversoeke", plaasblokparsversoeke.Text)
    cmd.Parameters.AddWithValue("@laastedatum", laastedatum.Text)
    

    正如下面正确评论的,您需要使用Add method 来添加参数:

    cmd.Parameters.Add("@plaasblokparsversoeke", SqlDbType.Varchar).Value = plaasblokparsversoekeVariable;
    cmd.Parameters.Add("@laastedatum", SqlDbType.Varchar).Value = laastedatumVariable;
    

    【讨论】:

    【解决方案2】:

    首先,避免以这种方式对参数化查询进行硬编码,以避免 SQL 注入。

    回答您的具体问题:您尝试在查询中使用参数,而没有在 SQLCommand 中定义它们。

    查看MSDN 以获取完整文档。

    【讨论】:

      【解决方案3】:

      有了这个查询

      Dim strSql5 As String = "SELECT  * FROM dbo.ontledings " & _
                                  " where plaasblok =  @plaasblokparsversoeke " & _
                                  " and analisedatum  =  @laastedatum"
      

      您正在定义 2 个名为 @plaasblokparsversoeke 和 @laastedatum 的 SQL 变量,您必须将它们作为参数传递给您的命令,就像这样

      command.Parameters.Add("@plaasblokparsversoeke", SqlDbType.Int);
      command.Parameters["@plaasblokparsversoeke "].Value = yourValue;
      

      关于SQL命令参数的MSDN文章here

      【讨论】:

      • 只是出于兴趣,是否有理由添加参数,然后在单独的行中设置它的值而不是使用 AddWithValue?还是您只是这样做是为了让 Rahul 尽可能清楚?
      • AddWithValue 有几个issues,应该不再使用了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 2013-07-03
      相关资源
      最近更新 更多