【.net/.net core】【报错处理】另一个 SqlParameterCollection 中已包含 SqlParameter。

错误场景:使用同名参数在两个SQL句柄中使用参数化查询

cs 复制代码
SqlCommand cmd1 = new SqlCommand("SELECT * FROM User WHERE ID = @UserID", conn);
cmd1.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int) { Value = 100 });

SqlCommand cmd2 = new SqlCommand("UPDATE User SET Age = 20 WHERE ID = @UserID", conn);
cmd2.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int) { Value = 100 });

解决方案:

1.清空参数

cs 复制代码
SqlCommand cmd = new SqlCommand("", conn);
// 第一次使用
cmd.CommandText = "SELECT * FROM User WHERE ID = @UserID";
cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int) { Value = 100 });
cmd.ExecuteReader();

// 第二次使用(未清空参数)
cmd.CommandText = "SELECT * FROM Order WHERE UserID = @UserID";
cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int) { Value = 100 }); // ❌ 重复添加同名参数(虽不是同一个实例,但也会报错"已包含名为@UserID的参数")

// 正确写法:先清空参数
cmd.Parameters.Clear(); // ✅ 清空原有参数
cmd.CommandText = "SELECT * FROM Order WHERE UserID = @UserID";
cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int) { Value = 100 });
cmd.ExecuteReader();

2.使用不同名参数进行参数化查询

相关推荐
sang_xb43 分钟前
深入解析 HashMap:从存储架构到性能优化
android·java·性能优化·架构
找不到、了1 小时前
栈帧四要素:JVM 方法执行的完整上下文
java·jvm
程序员小假1 小时前
我们来说一说 Redis IO 多路复用模型
java·后端
okseekw1 小时前
一篇吃透函数式编程:Lambda表达式与方法引用
java·后端
程序员根根1 小时前
JavaSE 进阶:IO 流核心知识点(字节流 vs 字符流 + 缓冲流优化 + 实战案例)
java
爱装代码的小瓶子1 小时前
【c++知识铺子】最后一块拼图-多态
java·开发语言·c++
认真敲代码的小火龙1 小时前
【JAVA项目】基于JAVA的超市订单管理系统
java·开发语言·课程设计
油丶酸萝卜别吃1 小时前
在springboot项目中怎么发送请求,设置参数,获取另外一个服务上的数据
java·spring boot·后端
7哥♡ۣۖᝰꫛꫀꪝۣℋ1 小时前
SpringBoot 配置⽂件
java·spring boot·后端