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

一行行取出。

相关推荐
桑榆肖物30 分钟前
ImprovWifi 跨平台传输层设计:把协议层做薄,把宿主层做稳
嵌入式硬件·wifi·.net·ble
步步为营DotNet9 小时前
深度探索.NET 11:Blazor 在客户端数据可视化的革新与优化
信息可视化·.net
我是唐青枫1 天前
C#.NET YARP + OpenTelemetry:网关链路追踪实战
开发语言·c#·.net
步步为营DotNet1 天前
深入.NET 11:.NET Aspire 在云原生资源编排与管理的卓越实践
云原生·.net
一个帅气昵称啊1 天前
基于.NET的NetCoreKevin框架中AgentFramework实现AI智能体Skill和工具动态管理和加载
.net
魏杨杨2 天前
一个程序员眼中的 AI 核心概念,讲透 LLM 、Agent 、MCP 、Skill 、RAG...
ai·.net·agent·claude code
AI行业学习2 天前
.NET Framework 3.5 官方离线包下载+完整安装教程【2026.5.19】
.net
切糕师学AI2 天前
.NET 中 CallerMemberName 与 StackTrace 的深度对比
.net·调用栈·stacktrace·callermember
步步为营DotNet2 天前
解锁.NET 11 新境:ASP.NET Core 10 在微服务安全通信的深化与实践
微服务·asp.net·.net
唐青枫2 天前
C#.NET YARP + OpenTelemetry:网关链路追踪实战
c#·.net