问:SqlHelper.ExecuteReader方法返回的sqlDataReader的connection是如何关闭的?

最近在看dnn中的cbo.vb ,这个地方搞不明白,望兄弟们指点迷津。
例如   cbo.vb 中的  Public Shared Function FillCollection(ByVal dr As IDataReader, ByVal objType As Type) As ArrayList 方法,是把datareader的内容转到ArrayList 中,其中的部分代码
             While  dr.Read
                
'  fill business object
                objFillObject  =   CreateObject (objType, dr, objProperties, arrOrdinals)
                
'  add to collection
                objFillCollection.Add(objFillObject)
            
End   While

            
'  close datareader
             If   Not  dr  Is   Nothing   Then
                dr.Close()
            
End   If
我跟了一下,dr是由SqlHelper.ExecuteReader返回的,一直纳闷dr的connection是在什么时候如何关闭的,按理说应该是在dr.Close()的时候关闭connection,  SqlHelper.ExecuteReader中应该有dr.Close()自动关闭connection的设置。
查了一些帖子:有两种不同的意见
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.代码看看。

你可能感兴趣的:(Connection)