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

一行行取出。

相关推荐
夏霞8 分钟前
c# 使用vs code 创建.net8.0以及.net6.0 webApi项目的教程
开发语言·c#·.net
追逐时光者11 分钟前
C#/.NET/.NET Core优秀项目和框架2025年11月简报
后端·.net
Aevget1 小时前
界面控件DevExpress WinForms中文教程:Data Grid - 如何获取汇总值?
ui·.net·界面控件·winform·devexpress
时光追逐者4 小时前
C# 中 ?、??、??=、?: 、?. 、?[] 各种问号的用法和说明
开发语言·c#·.net·.net core
e***28296 小时前
四大.NET ORM框架深度对比:EF Core、SqlSugar、FreeSql与Dapper的性能、功能与适用场景
.net
缺点内向8 小时前
如何在C#中为文本内容添加行号?
开发语言·c#·word·.net
好好研究9 小时前
SSM整合(一)
java·spring·mvc·mybatis·db
星尘库10 小时前
.NET Framework中报错命名空间System.Text中不存在类型或命名空间名Json
java·json·.net
遇到困难睡大觉哈哈13 小时前
Harmony os 网络防火墙实战:用 @ohos.net.netFirewall 给应用加一道“网闸”
网络·.net·harmonyos·鸿蒙
搬砖的工人14 小时前
.NET 9.0 与 Swagger 的集成实践:一步步构建Api文档
.net