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

相关推荐
NE_STOP5 小时前
Vide Coding--AI编程工具的选择
java
码云数智-园园5 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆5 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
小宇宙Zz5 小时前
Maven依赖冲突
java·服务器·maven
swordbob5 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
咖啡八杯6 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
十五喵源码网6 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记
摇滚侠6 小时前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea
源分享6 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Flittly6 小时前
【AgentScope Java新手村系列】(10)实战-多Agent天气助手
java·spring boot·spring