DataAdapter.Fill returns 行计数但 Rows.List 为空

DataAdapter.Fill returns the row count but Rows.List is null

对此我真的很纳闷。我在 SQL 服务器中有一个 table,具有三个 nvarchar(255) 列和几行,仅用于测试。以下代码正确 returns 列名和行数 2 但 Rows.List = null。如果我使用 reader.Read() 我可以读取行中的数据,以便查询返回数据。任何更改 table 中数据的查询(例如 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.) returns 总是 null 因为这是反映的实现:

protected virtual ArrayList List => (ArrayList) null;

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

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

如果您想要 DataRow[],请改用 ToArray