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

