使用参数化查询及ExecuteNonQuery时标量变量未声明的解决方法
解决“Must declare the scalar variable "@regNo"”错误的方案
嘿,我一眼就看出你代码里的问题啦!你给SqlDataAdapter的SelectCommand添加了参数,但之后又重新创建了一个全新的DeleteCommand对象——这个新命令根本没带上你定义的@regNo参数,执行的时候自然会报错说变量未声明。
下面给你两种修正方案,第二种更简洁推荐用:
方案一:修正原有的SqlDataAdapter用法
如果你非要用SqlDataAdapter来做,那得确保给DeleteCommand添加参数,而不是给SelectCommand加:
private void btndelete_Click(object sender, EventArgs e) { using (SqlConnection con = new SqlConnection(cs)) { con.Open(); string query = "delete stu_data where Reg_no=@regNo"; SqlDataAdapter sda = new SqlDataAdapter(query, con); // 直接初始化DeleteCommand并添加参数 sda.DeleteCommand = new SqlCommand(query, con); sda.DeleteCommand.Parameters.AddWithValue("@regNo", textBox1.Text.ToString()); sda.DeleteCommand.ExecuteNonQuery(); } }
方案二:改用SqlCommand(更推荐)
其实单纯执行删除操作,用SqlCommand更直接,没必要绕SqlDataAdapter——它主要是用来批量处理数据或填充DataSet的。这种写法更简洁,也不容易出错:
private void btndelete_Click(object sender, EventArgs e) { using (SqlConnection con = new SqlConnection(cs)) { con.Open(); string query = "delete stu_data where Reg_no=@regNo"; using (SqlCommand cmd = new SqlCommand(query, con)) { cmd.Parameters.AddWithValue("@regNo", textBox1.Text.ToString()); cmd.ExecuteNonQuery(); } } }
简单总结下:你之前的错误核心是参数加错了命令对象,后来新建的DeleteCommand完全没带参数。上面两种方案都能解决这个问题,选第二种会更清爽哦~
内容的提问来源于stack exchange,提问作者saif khan
相关产品推荐
相关产品推荐

