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
相关产品推荐
相关产品推荐

