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

一行行取出。

相关推荐
步步为营DotNet12 小时前
深入探究.NET 11中的 Native AOT 性能优化与实践
安全·云原生·.net
时光追逐者12 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 70 期(2026年5.01-5.10)
c#·.net·.netcore
Java面试题总结13 小时前
.NET 8 Web开发入门(三):解构引擎——依赖注入(DI)与中间件管道
前端·中间件·.net
lzhdim14 小时前
一款基于 .Net WinForm 开发的节点编辑器,纯 GDI 实现,体积仅 100+Kb
编辑器·.net
步步为营DotNet14 小时前
.NET 11 中.NET Aspire 在云原生应用多环境部署与安全治理的深度实践
安全·云原生·.net
我是唐青枫1 天前
终于不用手搓两级缓存了!C#.NET HybridCache 详解:L1 L2、标签失效与防击穿实战
redis·缓存·c#·.net
TeamDev1 天前
在 Excel 加载项中嵌入 Web 视图
前端·后端·.net
追逐时光者1 天前
C#/.NET/.NET Core技术前沿周刊 | 第 70 期(2026年5.01-5.10)
后端·.net
黄俊懿1 天前
复合索引设计指南:最左前缀 & 字段排座次
数据库·sql·mysql·adb·性能优化·dba·db