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())
...

一行行取出。

相关推荐
步步为营DotNet1 天前
.NET 11 与 C# 14 助力云原生应用安全架构升级
云原生·c#·.net
CSharp精选营2 天前
Avalonia UI:.NET 跨平台桌面开发的“真香”选择
.net·跨平台·avalonia·桌面开发·ui框架
唐青枫2 天前
C#.NET MemoryMarshal 深入解析:零拷贝内存重解释、二进制读写与使用边界
c#·.net
刚子编程3 天前
推荐一个开箱即用的.NET权限管理平台:Magic.NET
.net·开源项目·权限管理·企业级框架·后台脚手架
wwyyxx263 天前
Linux 下 .NET 程序 CPU 异常占用排查记录
linux·.net·调试
回忆2012初秋4 天前
.NET 时序数据操作实战:Apache IoTDB连接与 CRUD 完全指南
.net·apache·iotdb
回忆2012初秋4 天前
.NET 实战:Redis 缓存穿透、击穿与雪崩的原理剖析与解决方案
redis·缓存·.net
武藤一雄4 天前
19个核心算法(C#版)
数据结构·windows·算法·c#·排序算法·.net·.netcore
旡心-小小康5 天前
.NET WebSocket Socket
websocket·网络协议·.net
wenha5 天前
踩坑记录:UTF-8、UTF-8-BOM 与 GB2312 读取的乱码真相
utf-8·.net·编码·utf-8-bom