给定一个 OracleDataReader,我如何 return 整个结果集?

Given an OracleDataReader, how do I return the entire resultset?

我有下面的代码,当前 returns 一个业务对象列表。虽然它有效,但我想减少我们周围的重复代码量。由于下面的代码是特定于类型的 - 每个 BO 都有自己的 ConnecToDbAndGetItems() 方法 - 每个 BO 都会复制整个方法。

con.Open();
OracleDataReader dr = cmd.ExecuteReader();
BuildListOfItems(dr, ref itemsToReturn);
con.Close();
dr.Close();

我更喜欢这样的东西,一个易于管理的小增量更改:

con.Open();
OracleDataReader dr = cmd.ExecuteReader();

// Gimme all the data here and
// return that to another method for building BOs

con.Close();
dr.Close();

最终结果是一个通用的数据检索机制,所有 GetXXX() 方法都可以调用该机制,并将结果(数组、列表、???)传递给构建器对象以进行进一步处理。

如何从 reader 中获取所有记录?

您可以像这样使用 DataTable:

DataTable result = new DataTable();
result.Load(dr);

我们在项目中同时使用了DataAdapter 和DataReader。我可以说,DataReader 提供了更好的性能。您应该设置 FetchSize 属性 以获得更好的性能。