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

使用参数化查询及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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:59