【问题标题】:Must declare the scalar variable (SQL)必须声明标量变量 (SQL)
【发布时间】:2015-08-31 15:35:59
【问题描述】:

请帮我解决这个问题,我已经搜索了几个小时,但无法解决。

这是我的代码:

Private Sub search_btn_Click(sender As Object, e As EventArgs) Handles search_btn.Click
    connectionString = "Data Source=MININT-BJDM4MI;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\QCDB.mdf;Database=QCDB;Trusted_Connection=Yes;"
    sql = "SELECT * FROM PRODUCT WHERE SAMPLE_SOURCE = @SOURCE"

    Dim connection As New SqlConnection(connectionString)
    Dim dataadapter As New SqlDataAdapter(sql, connection)
    Dim ds As New System.Data.DataSet()
    Dim cmd = New SqlCommand(sql, connection)

    cmd.Parameters.AddWithValue("@SOURCE", spl_source_combox.Text)

    Try
        connection.Open()
        dataadapter.Fill(ds, "PRODUCT")
        DataGridView1.Refresh()
        cmd.ExecuteNonQuery()
        connection.Close()
        DataGridView1.DataSource = ds.Tables(0)
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
    End Try
End Sub

【问题讨论】:

    标签: sql vb.net


    【解决方案1】:

    当你创建 SqlDataAdapter 时,你应该传入你的命令对象而不是 SQL 字符串。

    Private Sub search_btn_Click(sender As Object, e As EventArgs) Handles search_btn.Click
    connectionString = "Data Source=MININT-BJDM4MI;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\QCDB.mdf;Database=QCDB;Trusted_Connection=Yes;"
    sql = "SELECT * FROM PRODUCT WHERE SAMPLE_SOURCE = @SOURCE"
    
    Dim connection As New SqlConnection(connectionString)
    Dim cmd = New SqlCommand(sql, connection)
    Dim dataadapter As New SqlDataAdapter(cmd)
    Dim ds As New System.Data.DataSet()
    
    cmd.Parameters.AddWithValue("@SOURCE", spl_source_combox.Text)
    
    Try
        connection.Open()
        dataadapter.Fill(ds, "PRODUCT")
        DataGridView1.Refresh()
        connection.Close()
        DataGridView1.DataSource = ds.Tables(0)
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
    End Try
    End Sub
    

    【讨论】:

      【解决方案2】:

      如果您使用存储过程而不是在代码中传递 sql 会更好,但是您的异常的原因是因为您的 SQL 语句中没有声明 @SOURCE 变量。试试这个:

      sql = "DECLARE @SOURCE varchar(50);SELECT * FROM PRODUCT WHERE SAMPLE_SOURCE = @SOURCE"

      【讨论】:

      • 这不能解决。变量需要在vb代码中设置。
      • 是的,变量是在vb代码中设置的,但是在SQL代码中声明的
      【解决方案3】:

      您需要为您的@source 赋值:使用此行

      cmd.Parameters.AddWithValue("@SOURCE", spl_source_combox.Text) = "<Your Value>"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多