【.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.使用不同名参数进行参数化查询

相关推荐
Re_zero18 分钟前
线上日志被清空?这段仅10行的 IO 代码里竟然藏着3个毒瘤
java·后端
洋洋技术笔记24 分钟前
Spring Boot条件注解详解
java·spring boot
程序员清风18 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林55120 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
用户298698530141 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
牧马人win1 天前
SmartDapper.Repository
.net
华仔啊1 天前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing1 天前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠2 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840822 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot