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
有一个加载方法,该方法需要一个 IDataReaderDataTable.Load(IDataReader)
。我只是不知道为什么当我将它加载到 DataTable
中时,读取器工作不正常,但在打印它到调试窗口时它可以正常工作。我是不是忽略了什么?
SqlDataAdapter
并使用它的Fill
方法怎么样? - Soner GönülDataTable.Load
无论如何都会在内部使用数据适配器 :) 链接中提到的那些使用SqlDataReader
的“好处”仅适用于您不使用读取器来填充DataTable
的情况(这应该是意料之外的,因为数据适配器只是使用数据读取器填充数据表;如果您手动使用数据读取器进行填充,那么您期望有什么好处呢?您正在做完全相同的事情。成本在数据表中)。小心接受这样的建议,而不了解实际发生的事情 - 这将会伤害你。 - LuaanDataTable.Load
对我来说都很好用。如果您保持一切不变,使用数据适配器填充表格,它是否实际起作用?您是否有多个结果集?该命令是做什么的? - Luaan