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

一行行取出。

相关推荐
学以智用4 小时前
WinForms / WPF / Blazor 项目模板详解
.net
1-1=05 小时前
.NET Core 内存管理
.net·.netcore
comedate7 小时前
SMLib 安装与构建指南:wheel、源码构建、三平台差异与 6 个实测坑
安装·踩坑·构建·python 3.12·openusd·smlib
无风听海11 小时前
.NET 10之Span技术总结
.net
1-1=011 小时前
.NET Core 配置与选项
.net·.netcore·1024程序员节
mudtools11 小时前
在飞书 SDK 上用 Microsoft Agent Framework 搭一个能干活的工作搭子
人工智能·ai·.net·飞书·agent
ChaITSimpleLove12 小时前
Layout.WatchDog.NET 1.5.0-beta.3 发布:统一全后端雪花 ID 策略,数据库能力矩阵一览
.net·watchdog·日志记录器·节点资源监控看板·.net专属轻量级日志中心
IT规划师12 小时前
MQTT 实战 - 放下炫技,8 年踩坑的真心话与方法论(收官)
物联网·.net
CSharp精选营12 小时前
.NET 接口从 800ms 干到 60ms:生产环境这几个优化点最关键
性能优化·c#·.net·efcore