例如 cbo.vb 中的 Public Shared Function FillCollection(ByVal dr As IDataReader, ByVal objType As Type) As ArrayList 方法,是把datareader的内容转到ArrayList 中,其中的部分代码
查了一些帖子:有两种不同的意见
1.dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
注意括号里头的CommandBehavior.CloseConnection。这表明当我们手工关闭dataReader后,数据库连接会自动关闭。
2.如果您设置 CommandBehavior.CloseConnection 选项,则 DataReader 及其相关联的连接会在 DataReader 完成数据读取时自动关闭。这些看法不完全正确 — 只有当您在 ASP.NET Web 应用程序中使用复杂的绑定控件时,该选项才以这种方式工作。在整个 DataReader 结果集中循环到其行集的末尾(也就是说,当 Dr.Read — DataReader 的 Read 方法 — 返回 False 时)还不足以触发连接的自动关闭。不过,如果您绑定到一个复杂的绑定控件(例如,DataGrid),该控件则会关闭 DataReader 和连接 — 前提条件是您设置了 CommandBehavior.CloseConnection 选项。
不知道 SqlHelper.ExecuteReader是不是在dr.Close()时自动关闭connection的,如果是那么是如何实现的。明天晚上找找SqlHelper.代码看看。