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

一行行取出。

相关推荐
喵叔哟17 小时前
9.【.NET10 实战--孢子记账--产品智能化】--SP.MLService Microsoft.ML 升级到 .NET 10
microsoft·.net
hez20102 天前
C# 15 类型系统改进:Union Types
c#·.net·.net core
我是唐青枫3 天前
C#.NET ValueTaskSource 深入解析:零分配异步、ManualResetValueTaskSourceCore 与使用边界
c#·.net
.NET修仙日记3 天前
2026 .NET 面试八股文:高频题 + 答案 + 原理(基础核心篇)
云原生·面试·职场和发展·c#·.net·面试题·微软技术
宁&沉沦4 天前
前端开发者学 .NET:零基础到部署上线
.net
我是唐青枫4 天前
C#.NET ObjectPool 深入解析:对象复用、池化策略与使用边界
c#·.net
宁&沉沦4 天前
.NET 常见文件与扩展名含义(速查)
.net
叫我黎大侠4 天前
.NET 实战:调用千问视觉模型实现 OCR(车票识别完整教程)
阿里云·ai·c#·ocr·asp.net·.net·.netcore
唐青枫4 天前
C#.NET ValueTaskSource 深入解析:零分配异步、ManualResetValueTaskSourceCore 与使用边界
c#·.net