DataTable 未加载 SqlDataReader

DataTable not loading SqlDataReader

using (SqlConnection connection = new SqlConnection(connectionString))
    {
        using (SqlCommand command = new SqlCommand(sqlCommand, connection))
        {
            command.CommandType = CommandType.Text;
            connection.Open();
            using (SqlDataReader reader = command.ExecuteReader())
            {
                DataTable datatable = new DataTable();
                datatable.Load(reader);

                return datatable;
            }
        }
    }

运行 此代码 returns 一个空数据表。但是,循环遍历 reader.Read() 并打印到调试控制台显示 reader 有数据并且它打印了预期的数据。此外,当我在调试期间展开 reader 对象时,hasRows 为真,字段计数与返回的列数相符。

这里有一个类似的 post Trouble loading SQL Data Reader data into DataTable 但答案基本上是,不要使用它,使用 SqlDataAdapter。我更愿意使用它,DataTable 有一个采用 IDataReader DataTable.Load(IDataReader) 的加载方法。我只是不知道为什么 reader 在我将它打印到调试 window 时工作,但当我将它加载到 DataTable 时却不工作。我是不是忽略了什么?

尝试这样做看看是否有效...

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlDataAdapter dap = new SqlDataAdapter(sqlCommand,connection);
    DataTable datatable = new DataTable();
    dap.Fill(datatable);
    return datatable;
}

原来我只是忽略了一些东西,这实际上根本不是问题。原始代码实际上工作正常。调试时 DataTable 对象的预览显示 {} 并且在我看来是空的。

然后在名为 ExtendedProperties 的对象上有一个 属性,它有 Count = 0,这显然不是行数,但我只是掩饰并得到 Count = 0 卡在我的脑海里。

如果您发现自己处于相同情况,请在悬停对象时向下滚动并展开 Rows,您应该会在其中看到行数。

我在这件事上被骗了...对我的愚蠢感到抱歉,感谢大家的帮助。

使用SqlDataReaderDataAdapter,两者都可以。关闭连接后写return语句。试试看是否有效。