日期:2014-05-20  浏览次数:20421 次

vb.net 释放数据层连接的问题
我在数据层建立一个连接通过sql语句获取SqlDataReader
                Public   Function   DBDataReader(ByVal   SqlStr   As   String)   As   SqlDataReader
                        '-------------------------------------------
                        '按Sql语句执行查询返回DataReader
                        '-------------------------------------------
                        Dim   objConn   As   New   SqlConnection(MyDealData.ConnStr)
                        objConn.Open()
                        Dim   Command   As   New   SqlCommand(SqlStr,   objConn)
                        Dim   objDataReader   As   SqlDataReader   =   Command.ExecuteReader
                        Command.Dispose()
                        Return   objDataReader
                End   Function
在业务层进行使用返回的SqlDataReader
由于vb.net   无法使用   using(){}   结构进行释放连接,所以就进行手工释放
听说可以通过关闭SqlDataReader的方法进行释放连接。
      Protected   Sub   Button1_Click(ByVal   sender   As   Object,   ByVal   e   As   System.EventArgs)   Handles   LogIn.Click
    UserReader   =   DBDataReader(SqlStr)
    UserReader.Read()
    UserReader.Close()
End   Sub
然后查看sql的活动监视器,发现获取UserReader   的sql语句生成的连接仍在存在于连接池中,到底使用何种方法可以切实有效的释放连接池呢?因为这个问题我的连接池处理大量数据的时候经常会出现超出连接池数量的现象。

------解决方案--------------------
System.Data.CommandBehavior.CloseConnection是个枚举型参数,传给ExecuteReader方法
类似这样
Command.ExecuteReader(CommandBehavior.CloseConnection)