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

一行行取出。

相关推荐
淡海水9 小时前
02-02-原理篇-分代GC
算法·unity·c#·游戏引擎·.net·gc
1-1=014 小时前
.NET 依赖注入 续
.net
淡海水17 小时前
02-03-原理篇-大对象堆
unity·c#·游戏引擎·.net·gc
LateFrames1 天前
WPF 升级选型:用 .NET 8 还是 .NET 10
.net·wpf·.net8·.net10
淡海水2 天前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc
波力海苔夹心脆6752 天前
C# 值类型与引用类型详解:存储位置、赋值机制、参数传递、相等比较、装箱拆箱与常见陷阱
开发语言·jvm·经验分享·笔记·c#·.net
淡海水3 天前
01-04-认知篇-Unity内存全景
unity·c#·游戏引擎·.net·gc
JosieBook3 天前
【.NET工程师】.NET 工程师成长体系(精要版)
.net
淡海水3 天前
01-03-认知篇-C#内存模型深度解析
unity·c#·游戏引擎·.net·gc
AKULAKK4 天前
关于在Ghost版Win7上运行.net 2程序遇到的问题以及解决办法
.net·win7