繁体   English   中英

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;
            }
        }
    }

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

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

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

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

在此输入图像描述

如果您发现自己处于相同的情况,请在悬停对象时向下滚动并展开Rows ,您应该在那里看到行数。 在此输入图像描述

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM