首页 > 解决方案 > VB.NET SQL 查询失败。必须声明 Scalar 但它已经被删除

问题描述

好久没用VB.NET了,上次用VB写的,是VB6。天哪,我怀念过去的美好时光。无论如何,尝试在数据库上运行查询。我的代码如下:

    'Create a Connection object.
    myConn = New SqlConnection("Server=localhost\SQLEXPRESS;Database=dwt-monitor;Trusted_Connection=True;")

    'Create a Command object.

    myCmd = myConn.CreateCommand
    myCmd.CommandText = "select log_time as [Log Time], log_name as [Log Name], log_desc as [Log Description], type_name as [Log Type] from log as log
    left join log_type as lot on log.log_id=lot.type_id where type_name= @variable"
    myConn.Open()
    myCmd.Parameters.AddWithValue("@variable", type)
    myCmd.ExecuteNonQuery()

    Dim dataAdapter = New SqlDataAdapter(myCmd.CommandText, myConn.ConnectionString)
    Dim table As New DataTable()


    table.Locale = System.Globalization.CultureInfo.InvariantCulture
    dataAdapter.Fill(table)

    dgvHardwareLog.DataSource = table
    myConn.Close()

我收到此错误:

System.Data.SqlClient.SqlException:'必须声明标量变量“@variable”

谁能告诉我哪里出错了?我正在添加价值。但是,唉,有些事情是不正确的。

谢谢 :)

标签: sqlsql-servervb.net

解决方案


尝试更改以下行:

Dim dataAdapter = New SqlDataAdapter(myCmd.CommandText, myConn.ConnectionString)

使用以下内容,传递命令而不是仅传递命令 text。此外,删除myConn.ConnectionString

Dim dataAdapter = New SqlDataAdapter(myCmd)

此外,您可以删除以下行:

myCmd.ExecuteNonQuery()

问题是您在SqlDataAdapter构造函数中传递命令文本,而@variable参数会丢失,因为它已添加到myCmd


在https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/dataadapter-parameters查找更多详细信息。


推荐阅读