必须声明标量变量,但声明它

时间:2017-05-21 07:50:55

标签: sql vb.net

我已经在代码中声明了一个变量,但我对它仍然显示错误,任何想法仍然一无所知?  当我在显示每一行后删除WHERE clauses,但是当我将其放入时,我会"Must declare the scalar variable @startdata"

connect()
cmd.CommandText = "SELECT h_initials, h_date, h_hours FROM [h_holidays] WHERE h_date >= @startdata AND h_date < @enddata "
    cmd.Parameters.Clear()
    cmd.Parameters.Add("@startdata", SqlDbType.DateTime).Value = datetime_date.Value
    cmd.Parameters.Add("@enddata", SqlDbType.DateTime).Value = datetime_2.Value
    cmd.ExecuteScalar()

    Dim dataAdapter_holidays_all = New SqlDataAdapter(cmd.CommandText, con.ConnectionString)
    Dim table_holidays_all As New DataTable()
    table_holidays_all.Locale = System.Globalization.CultureInfo.InvariantCulture
    dataAdapter_holidays_all.Fill(table_holidays_all)
    Me.bs_holidays_all.DataSource = table_holidays_all

    dgv_holidays_all.DataSource = bs_holidays_all

    disconnect()

    dgv_holidays_all.RowHeadersWidth = "28"

    dgv_holidays_all.Columns(0).HeaderText = "User:"
    dgv_holidays_all.Columns(1).HeaderText = "Date:"
    dgv_holidays_all.Columns(2).HeaderText = "Hours:"

    dgv_holidays_all.EnableHeadersVisualStyles = False

我已经尝试了.addwithvalue参数仍然没有运气。

1 个答案:

答案 0 :(得分:1)

不,它没有被宣布。你的代码遍布整个地方。您首先创建一个SqlCommand对象,向其添加参数并调用其ExecuteScalar方法,但这没有任何意义,因为您正在检索多个值。然后,您使用相同的SQL创建SqlDataAdapter,但不向其SelectCommand添加任何参数。

您应该做的是创建SqlDataAdapter,获取其SelectCommand并向其添加参数,例如

Dim sql = "SELECT h_initials, h_date, h_hours FROM [h_holidays] WHERE h_date >= @startdata AND h_date < @enddata"
Dim adapter As New SqlDataAdapter(sql, con)

With adapter.SelectCommand.Parameters
    .Add("@startdata", SqlDbType.DateTime).Value = datetime_date.Value
    .Add("@enddata", SqlDbType.DateTime).Value = datetime_2.Value
End With

没有其他SqlCommand个对象。没有毫无意义的电话ExecuteScalar