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

C#简单Select查询报错:必须声明标量变量@Barcode 新手问题排查

错误原因

你的报错核心是参数绑定的执行顺序错误,具体问题点如下:

  • 你在调用da.Fill(dt)执行SQL查询之后,才给SqlCommand对象添加@Barcode参数,查询执行时参数还未声明,因此触发了"必须声明标量变量@Barcode"的报错。
  • 代码中的cmd.ExecuteNonQuery()属于冗余逻辑:你当前执行的是SELECT查询,已经通过SqlDataAdapter的Fill方法完成了数据查询并填充到DataTable中,不需要额外调用该方法重复执行命令。
  • 未对数据库相关资源做自动释放,SqlConnection、SqlCommand、SqlDataAdapter均实现了IDisposable接口,推荐使用using语句自动释放资源,无需手动调用Close方法。

修正后的代码

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 连接字符串建议放到配置文件中,此处仅做示例
            string connStr = "Data Source=xxx.xxx.xxx.xxx;Initial Catalog=VVM;Persist Security Info=True;User ID=sa;Password=xxxxx";
            
            // using自动释放资源
            using (SqlConnection con = new SqlConnection(connStr))
            {
                con.Open();
                using (SqlCommand cmd = new SqlCommand("Select dExpiryDate from tblStock where Stock_strBarcode= @Barcode", con))
                {
                    // 先添加参数,再执行查询
                    cmd.Parameters.AddWithValue("@Barcode", textBox1.Text);
                    
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        DataTable dt = new DataTable();
                        da.Fill(dt);
                        dataGridView1.DataSource = dt;
                    }
                }
            }
            
            MessageBox.Show("保质期数据加载完成!");
        }

        // 其余未修改的事件方法可保留原代码,此处省略
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:05