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

一行行取出。

相关推荐
冰可乐配36 分钟前
OpenClaw.NET .NET 原生插件开发完全指南:以 Mempalace 插件为范例
.net
财财源源42 分钟前
.NET 程序保护实战系列01-流水线架构与保护引擎总览
架构·.net
牧濑红莉1 小时前
自定义 Visual Studio 的界面外观
.net
精神底层7 小时前
Skill——提示词的系统化封装
windows·.net
geovindu8 小时前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式
时代的狂9 小时前
如何理解 C#/.NET 的依赖注入与生命周期
c#·.net·依赖注入·控制反转
time展天111 小时前
.NET 10 使用 Microsoft.AspNetCore.OpenApi 实现 API 版本管理
microsoft·.net
哥是强混1 天前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
公子小六1 天前
基于.NET的Windows窗体编程之WinForms图像控件
windows·microsoft·c#·.net·winforms
界面开发小八哥1 天前
界面控件DevExpress WPF v26.1新版亮点 - TreeView、Spreadsheet控件功能升级
.net·wpf·界面控件·devexpress·ui开发