You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET连接SQL Server报错Must declare the scalar variable "@" 求助

VB.NET WinForm查询SQL Server报错Must declare the scalar variable "@"修复方案

错误根因

SQL语句中的参数写法不符合SQL Server解析规则:
原SQL里写的查询条件为[Roll No.]=@[Roll No.],SQL Server解析参数时,会将@后紧邻的非法字符截断,最终识别到的参数名为空的@,和后续代码里添加的@Roll No.参数完全不匹配,因此抛出变量未声明的错误。

注意:方括号[]仅用于转义数据库中带特殊字符、空格的字段名/表名,参数名不能放在方括号里跟在@后面。

其他潜在问题

  • 数据库连接、SqlCommand、SqlDataAdapter均为实现了IDisposable的资源,原代码未做释放处理,长期运行会出现连接泄漏、内存占用过高问题
  • 直接将文本框输入值赋值给Int类型参数,未做合法性校验,用户输入非数字内容时会触发类型转换错误
  • 参数名带空格虽然语法允许,但极易出现解析、匹配错误,不推荐使用

修复后完整代码

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    ' 先校验输入是否为合法数字
    Dim rollNo As Integer
    If Not Integer.TryParse(TextBox5.Text, rollNo) Then
        MessageBox.Show("请输入合法的 Roll 编号")
        Return
    End If

    ' 用Using块自动释放数据库资源,无需手动Close/Dispose
    Using con As New SqlConnection("Data Source=LAPTOP-16IIQENS\SQLEXPRESS;Initial Catalog=students;Integrated Security=True")
        con.Open()
        ' 修正参数写法:字段用[]转义,参数名不带空格、不加方括号
        Dim cmd As New SqlCommand("select * from data where [Roll No.]=@RollNo", con)
        ' 参数名和SQL中保持一致,传入校验后的整型值
        cmd.Parameters.Add("@RollNo", SqlDbType.Int).Value = rollNo
        Dim adp As New SqlDataAdapter(cmd)
        Dim table As New DataTable()
        adp.Fill(table)

        If table.Rows.Count() > 0 Then
            DataGridView1.DataSource = table
            TextBox2.Text = table.Rows(0)(0).ToString()
            TextBox1.Text = table.Rows(0)(1).ToString()
            TextBox3.Text = table.Rows(0)(2).ToString()
            TextBox4.Text = table.Rows(0)(3).ToString()
        Else
            MessageBox.Show("No Data Found")
        End If
    End Using
End Sub

核心修改点

  • 把SQL语句里的错误参数@[Roll No.]改为合法参数名@RollNo,去掉参数外层的方括号
  • 新增学号输入的数字类型校验,避免类型转换错误
  • 用Using块包裹所有数据库相关对象,执行完成后自动释放资源,避免连接泄漏
  • 参数赋值直接传入校验后的整型值,不再直接传文本框的字符串内容

内容的提问来源于stack exchange,提问作者Mahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:12:31