c# - DataAdapter.Fill 返回行数,但 Rows.List 为空
问题描述
我真的很困惑。我在 SQL Server 中有一个表,其中包含三nvarchar(255)
列和几行仅用于测试。以下代码正确返回列名和行数 2 但是 Rows.List = null
。如果我使用reader.Read()
,我可以读取行中的数据,以便查询返回数据。任何更改表中数据的查询(例如 an)INSERT INTO ...
都可以正常工作。
DataTable results = new DataTable;
int rowsAffected = 0;
string connectionString = "Server=<serverName>;Database=<databaseName>;Integrated Security=SSPI";
string query = "SELECT * FROM testTable";
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, conn))
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
rowsAffected = dataAdapter.Fill(results);
当这完成时,results.Rows.Count = 2
哪个是正确的,results.Rows.List = null
哪个是错误的。为什么没有任何数据返回给我?
解决方案
我不确定您要完成什么,但方法DataRowCollection.List
是 1.) protected
,所以您可能只是在调试器中看到它的值,并且 2.) 总是返回,null
因为这是反映的实现:
protected virtual ArrayList List => (ArrayList) null;
您已经拥有DataRowCollection
in results.Rows
,因此您可以在 a 中枚举它或通过它的索引foreach
访问 s 。DataRow
如果你真的想要一个List<DataRow>
你可以使用:
List<DataRow> rowList = results.AsEnumerable().ToList();
如果您想DataRow[]
使用ToArray
。
推荐阅读
- angular - Angular 8 获取 BehaviorSubject 的值返回 null
- google-analytics - 谷歌分析会话计数问题
- java - 使用 BufferedReader 和 ScheduledExecutor 记录日志
- python - 遍历列表以查找列表元素的出现
- vue.js - 如何在保存时自动设置 vscode 格式的 Vue 模板?
- spring-boot - 对弹性搜索的 Spring Data 调用失败并出现解析错误
- html - 如何在具有六个框的网格布局中将多个图标放置在容器旁边?
- go - 通道过早终止
- python - 当值重复多次时如何找到列的总数?试图有条件地找到一场 NHL 比赛的“最终比分”
- c# - 安装 MSI 时,CREATE DATABASE 权限被拒绝