- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
实际上不一定是 IDataReader
.
我有一个类似这样的函数:
public IEnumerable<MyClass> GetObjects()
{
IDataReader dr = GetSomeDataReader();
while (dr.Read())
{
yield return new MyClass(dr);
}
CloseDBConnections();
}
这工作得很好,直到我像这样重构它:
public IEnumerable<MyClass> GetObjects()
{
IDataReader dr = GetSomeDataReader();
try
{
return ProcessReader(dr);
} finally {
CloseDBConnections();
}
}
public IEnumerable<MyClass> ProcessReader(IDataReader dr)
{
while (dr.Read())
{
yield return new MyClass(dr);
}
}
这不起作用,因为当 CloseDBConnections()
执行后枚举尚未处理。
调用.ToList()
从 GetObjects
返回时是实际执行枚举的内容,但那时连接已经被破坏,IDataReader
失败。
以我为例 CloseDBConnections
无法从新的 ProcessReader
中调用功能因为 IDataReader
可能来自其他来源(在这种情况下重构的全部意义)
是否有一个合理的解决方法,或者我必须复制枚举代码?
我尝试调用 ProcessReader
如yield return
而不是return
但这不起作用,因为 C#(可以理解)认为我正在尝试添加 IEnumerable
到IEnumerable
!
最佳答案
通过回调在 ProcessReader
中调用 CloseDBConnections
怎么样?
public IEnumerable<MyClass> GetObjects()
{
return ProcessReader(GetSomeDataReader(), CloseDBConnections);
}
public IEnumerable<MyClass> ProcessReader(IDataReader dr, Action OnFinished)
{
try
{
while (dr.Read())
yield return new MyClass(dr);
}
finally
{
if (OnFinished != null)
OnFinished();
}
}
关于c# - 在完成返回后关闭 IDataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17852918/
我有两种情况从IDataReader对象中提取信息 Case - 1 - 长度,计算序数然后解析字符串 public static string GetString(IDataReader rdr,
我正在编写一个类,它封装了使用 ADO.NET 从数据库中检索数据的复杂性。其核心方法是 private void Read(Action action) where T : class, new()
实际上不一定是 IDataReader . 我有一个类似这样的函数: public IEnumerable GetObjects() { IDataReader dr = GetSomeDataR
我有一个看起来像这样的 XML: Row 1 - Col 1 Row 1 - Col 2 Row 1 - Col 3 ...
出于某种原因,这段代码: MethodInfo iDataReaderIndexerProperty = typeof(IDataReader).GetProperties() .Single
我正在尝试创建一个“Helper”类,您只需在其中传递驱动程序和参数,该类就会为您执行连接和连接字符串组装。 我一直在使用 System.Data 的接口(interface),例如 IDataRea
这个问题在这里已经有了答案: Does casting create new object? (3 个答案) 关闭 4 年前。 假设我创建了一个数据读取器。 我的数据库类中有一个方法 - 以这种方式
如何使用泛型将 DataReader 对象映射到类对象? 例如我需要做以下事情: public class Mapper { public static List MapObj
谁能告诉我这两段代码的区别?为什么要使用 IDataReader? using (IDataReader reader = cmd.ExecuteReader()) { while (read
在使用 reader.Read(); 遍历行之前,是否有任何方法可以获取从 SQL 查询(从 IDataReader)返回的总行数? 最佳答案 没有。 IDataReader 是结果集的简单只进 Vi
我有一个 List有一百万个元素。 (它实际上是一个 SubSonic Collection 但它不是从数据库加载的)。 我目前使用 SqlBulkCopy 如下: private string Fa
我继承的典型查询执行模式是这样的: using (IDataReader r = query.ExecuteReader()) { while (r.Read()) { // etc.
我正在考虑在 IDataReader 上模拟一个扩展方法(在项目中使用) . ReadAll()时我想返回一个测试数据集合(下)被调用。 public static IEnumerable ReadA
我正在尝试确定代码库中是否存在明显的错误。 有问题的代码调用第三方 dll,它返回一个 IDataReader。如果代码使用读取器而不处理它,它不会显式返回到池中,对吗? 调用代码如下: IDataR
我正在为 map 实体和数据集使用 AutoMapper AutoMapper.Mapper.CreateMap(): 并且我在 Home 实体中有一个名为 MobileNumber 的属性,并且想在
我正在做一个大规模的插入/更新操作。 所以我正在使用 SqlBulkCopy。 SqlConnection myConnection = new SqlConnection(myConnectionS
我在窗口 C# vs05 上工作。我想通过 IDataReader 读取图像....在 oledb 中....我该怎么做假设我想从数据库列名称学生 ID 中读取 int 值然后我用下面的方式编写代码
我想从数据库中读取数据到列表。 我试过下面的代码 public List StoredProcedureForIList(string spName, params IDataParameter[]
我正在尝试将 SQL 数据库中的数据(1 个表中的 4 列)加载到一个列表中,到目前为止已经完成了 List FNameList = (from IDataRecord r in myReader
在使用 IDataReader 对象(DbDataReader)中包含的信息加载它后,我试图向 DataTable 添加一个新条目> 具体来说。加载顺利,我认为对数据库的查询是正确的。 尝试添加新行时
我是一名优秀的程序员,十分优秀!