DataTable.Load(reader)注意事项

对于在C#中操作数据库查询,这样的代码很常见:

csharp 复制代码
using var cmd = ExecuteCommand(sql);
using var reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
...

一般的查询是没问题的,但是如果涉及主键列的查询,这个时候得注意了,如果select 字段有主键字段,并且主键列会存在多行相同值,如:

这时执行完Load你会发现dt只有1行...

解决办法就是不要使用Load,而是使用

csharp 复制代码
while(reader.Read())
...

一行行取出。

相关推荐
用户4488466710608 小时前
.NET进阶——设计模式(1)单例设计模式
.net
切糕师学AI11 小时前
.NET 如何引用两个不同版本的dll?
c#·.net
用户44884667106015 小时前
.NET进阶——深入理解泛型(4)泛型的协变逆变
.net
步步为营DotNet15 小时前
深度解析.NET中HttpClient的生命周期管理:构建稳健高效的HTTP客户端
网络协议·http·.net
缺点内向17 小时前
如何在 C# 中高效的将 XML 转换为 PDF
xml·后端·pdf·c#·.net
时光追逐者17 小时前
Visual Studio 2026 正式版下载与安装详细教程!
ide·c#·.net·.net core·visual studio
唐青枫17 小时前
C# 列表模式(List Patterns)深度解析:模式匹配再进化!
c#·.net
步步为营DotNet1 天前
深入理解IAsyncEnumerable:.NET中的异步迭代利器
服务器·前端·.net
玩泥巴的2 天前
强的飞起的 Roslyn 编译时代码生成,实现抽象类继承与依赖注入的自动化配置
c#·.net·代码生成·roslyn
mudtools2 天前
强的飞起的 Roslyn 编译时代码生成,实现抽象类继承与依赖注入的自动化配置
c#·.net