您可能会问,因为您的 DataReader 代码看起来像这样:
static void ViaDataReader(IDataReader rdr)
{
while (rdr.Read())
Console.WriteLine("{0,-27} {1,-46} {2,-25} {3}", rdr[0], rdr[1], rdr[2], rdr[3]);
}
/// ...
ViaDataReader(DbProviderFactories.GetFactoryClasses().CreateDataReader());
但正如 Tim 所指出的,如果您提前知道每次迭代都需要 DataRow,那么您应该改用 DataTable,然后只对其进行迭代Rows 属性(以下输出与上面相同):
static void ViaDataTable(IDataReader rdr)
{
var table = new DataTable();
table.Load(rdr);
foreach (DataRow row in table.Rows)
Console.WriteLine("{0,-27} {1,-46} {2,-25} {3}", row[0], row[1], row[2], row[3]);
}
/// ...
ViaDataTable(DbProviderFactories.GetFactoryClasses().CreateDataReader());
如果您出于某种原因绝对必须继续使用DataReader,我想您可以在第一个示例中添加一个循环索引整数,然后从每个(完全预加载的DataTable)中获取每一行迭代。但既然DataTable的全面性更丰富,在做完DataTable.Load()之后,真的没有理由不放弃DataReader。