首页 > 解决方案 > 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哪个是错误的。为什么没有任何数据返回给我?

标签: c#sql-serverdataadapter

解决方案


我不确定您要完成什么,但方法DataRowCollection.List是 1.) protected,所以您可能只是在调试器中看到它的值,并且 2.) 总是返回,null因为这是反映的实现:

protected virtual ArrayList List => (ArrayList) null;

您已经拥有DataRowCollectionin results.Rows,因此您可以在 a 中枚举它或通过它的索引foreach访问 s 。DataRow如果你真的想要一个List<DataRow>你可以使用:

List<DataRow> rowList = results.AsEnumerable().ToList();

如果您想DataRow[]使用ToArray


推荐阅读