DataTable没有加载SqlDataReader

时间:2015-12-17 15:25:03

标签: c# .net datatable 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;
            }
        }
    }

运行此代码将返回一个空的DataTable。但是,循环遍历reader.Read()并打印到调试控制台会显示读者有数据并打印预期数据。此外,当我在调试期间展开reader对象时,hasRows为true,并且字段数对于返回的列数是正确的。

这里有类似的帖子 Trouble loading SQL Data Reader data into DataTable 但答案基本上是,只是不要使用它,使用SqlDataAdapter。我更喜欢使用它,而DataTable有一个带有IDataReader DataTable.Load(IDataReader)的加载方法。我只是不知道为什么读者在我将其打印到调试窗口时工作,而不是在我将其加载到DataTable时。我只是忽略了什么?

3 个答案:

答案 0 :(得分:3)

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

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

enter image description here

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

我被骗了这个...对不起我的愚蠢,感谢大家的帮助。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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