【发布时间】:2015-12-17 15:25:02
【问题描述】:
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() 并打印到调试控制台表明阅读器有数据并且它会打印预期的数据。此外,当我在调试期间展开阅读器对象时,hasRows 为 true,并且字段计数与返回的列数相符。
这里有一个类似的帖子
Trouble loading SQL Data Reader data into DataTable
但答案基本上是,不要使用它,使用SqlDataAdapter。我更喜欢使用它,DataTable 有一个加载方法,它采用 IDataReader DataTable.Load(IDataReader)。我只是不知道为什么当我将它打印到调试窗口时阅读器正在工作,但当我将它加载到DataTable 时却没有。我只是忽略了什么吗?
【问题讨论】:
-
@SonerGönül 我在 SqlDataReader 上看不到 Fill 方法 msdn.microsoft.com/en-us/library/…
-
使用
SqlDataAdapter并使用它的Fill方法怎么样? -
@SonerGönül 我可以使用
SqlDataAdapter,但我只是好奇为什么DataTable 上的适当方法不起作用...... SqlDataReader 更快,我更喜欢使用它。以下是有关差异的一些信息stackoverflow.com/a/1676809/3866019 -
我怀疑有什么区别 -
DataTable.Load无论如何在内部使用数据适配器 :) 您链接的答案中使用SqlDataReader的所有“好处”仅在您不使用时适用读者填写DataTable(这不应该是意外的,因为数据适配器只是使用数据阅读器填充数据表;如果您使用数据阅读器手动执行此操作,您会期望在哪里获得任何好处?您是做完全相同的事情。成本在数据表中。)。在不了解实际情况的情况下接受这样的建议时要小心——这会很痛苦。 -
无论如何,
DataTable.Load对我来说很好用。如果您保持一切原样并使用数据适配器来填充表格,它真的有效吗?你有多个结果集吗?命令有什么作用?
标签: c# .net datatable sqldatareader