【发布时间】:2011-08-12 08:44:40
【问题描述】:
我创建了一个连接类,它应该将数据表/数据读取器等返回到我的网页。我担心使用此类无法正确关闭连接。这是课程:
Imports Microsoft.VisualBasic
Namespace myConnection
Public Class DB
Public Shared Function GetConnStr()
Return "server=foobar"
End Function
Public Shared Function OpenConn()
Return New System.Data.SqlClient.SqlConnection( GetConnStr )
End Function
Public Shared Function OpenReader(SQL As String)
Dim conn
conn = OpenConn
conn.Open
Return New System.Data.SqlClient.SqlCommand(SQL, conn).ExecuteReader(System.Data.CommandBehavior.CloseConnection)
End Function
Public Shared Function OpenTable(SQL As String)
Dim conn
conn = OpenConn
conn.Open
Dim dr As System.Data.SqlClient.SqlDataReader = New System.Data.SqlClient.SqlCommand(SQL, conn).ExecuteReader(System.Data.CommandBehavior.CloseConnection)
Dim dt As System.Data.DataTable = New System.Data.DataTable()
dt.Load(dr)
Return dt
End Function
Public Shared Function ExecuteSQL(SQL As String)
Dim conn
conn = OpenConn
conn.Open
Return New System.Data.SqlClient.SqlCommand(SQL, conn).ExecuteNonQuery()
End Function
End Class
End Namespace
这是我的使用方法:
rst = conn.OpenReader(SQL)
While rst.Read
end while
rst.close
我担心一旦我投入生产,连接将无法正常关闭,我的网站将会失败。我是 .net 新手,这门课的校长有什么问题吗?
【问题讨论】:
-
编写自己的连接类听起来是个坏主意。
-
编写 Connection Helper 类是可以的,只要您记得始终在使用它的任何地方明确关闭和处置您的连接,而不仅仅是在您的基类上。
-
Andomar,你能详细说明为什么这是个坏主意吗?费利佩,在我的例子中 rst.Close 就足够了,还是我必须做 rst.Close 和 rst.Dispose ?
-
Close() 方法确实关闭了连接,但是它将对象留在内存中以防以后使用,Dipose() 方法消除了对象及其资源,因此不能不再使用了。
标签: asp.net sql-server vb.net ado.net