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

一行行取出。

相关推荐
rockey6279 小时前
AScript如何实现LINQ语法
sql·c#·.net·linq·script·eval·expression
喵叔哟19 小时前
11.【.NET10 实战--孢子记账--产品智能化】--接入第三方平台
.net·openai
用户82918071547519 小时前
dotnet基础开发之-Redis分布式锁
.net
步步为营DotNet21 小时前
解锁.NET 11 新能:C# 14 在客户端安全编程的革新与实践
人工智能·microsoft·.net
步步为营DotNet21 小时前
深入.NET 11:ASP.NET Core 10 高并发场景下的性能调优与安全加固
人工智能·microsoft·.net
xifangge20252 天前
彻底解决 .NET 10.0 运行库缺失报错:从 CLR 寻址机制到全版本离线部署实践(附 net运行库合集安装包)
.net
rockey6272 天前
AScript之匿名类型与动态类型
c#·.net·script·eval·expression·动态脚本
一个帅气昵称啊2 天前
.Net基于NetCoreKevin框架 AI 与 Hangfire 集成:实现AI智能自动任务调度
人工智能·.net·hangfire
杨云龙UP2 天前
ODA/Oracle 19c CDB/PDB 环境下报错ORA-65162:common user密码过期问题排查与处理_2026-05-15
linux·运维·数据库·oracle·dba·db
bjzhang752 天前
Lin CMS .NET Core——一款基于 .NET 8 + FreeSql 实现的前后端分离的 CMS 系统
.net·lin cms