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

C#中运行SelectRow方法抛出SqlException提示必须声明标量变量@ID怎么解决

问题解决方案

错误根因

  • 代码中的SQL查询声明了参数占位符@ID,但没有为SqlDataAdapter配置对应的参数值,数据库执行查询时无法识别未定义的标量变量,因此抛出该异常。
  • selectall方法没有使用参数化查询,所以相同的代码结构可以正常运行。

修复代码

public DataTable SelectRow(string ContactID)
{
    string query = "Select * from ContactsList Where ContactID = @ID";
    // using块会在代码执行结束后自动释放数据库连接,避免资源泄漏
    using (SqlConnection connection = new SqlConnection(ConnectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
        // 为@ID参数赋值,与方法传入的ContactID绑定
        adapter.SelectCommand.Parameters.AddWithValue("@ID", ContactID);
        // 若你明确数据库中ContactID的字段类型,更推荐强类型赋值写法,避免类型推断异常,示例如下(假设ContactID为int类型):
        // adapter.SelectCommand.Parameters.Add("@ID", SqlDbType.Int).Value = int.Parse(ContactID);
        
        DataTable data = new DataTable();
        adapter.Fill(data);
        return data;
    }
}

补充注意点

  • 优先使用强类型参数赋值替代AddWithValue,可以避免自动类型推断不匹配导致的隐性异常
  • 所有实现了IDisposable接口的数据库操作对象,都建议用using块包裹,自动完成资源释放,无需手动写Close/Dispose逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:45:00