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)