是一个函数 而已; 数据库打开连接,未关闭不会影响到整个应用程式; 果真是这样吗? 而已 数据库打开连接,未关闭不会影响到整个应用程式 果真是这样吗
让我们谈谈数据库连接的问题, 数据库里, 多来个, 即使你改变这个连接数, 让我们谈谈数据库连接的问题,在 Oracle 数据库里,一般默认的数据库连接数最多也就 100 多来个,不会超过 200 个,即使你改变这个连接数, 即使你改变这个连接数 但无论怎样,它的连接数是有限的,不可能无限地供你消耗。 但无论怎样, 它的连接数是有限的, 不可能无限地供你消耗。
这个程式里, 不仅不会自动关闭数据库连接,象这样的函数还会每次调用,都会重新用掉一个数据库连接; 如果象这样的函数很多的话, 在 Web 这个程式里,它不仅不会自动关闭数据库连接,象这样的函数还会每次调用,都会重新用掉一个数据库连接 如果象这样的函数很多的话, 你就等着一个错误警告页面弹出来, 等讯息。 你就等着一个错误警告页面弹出来,如 Database Connection Timeout….等讯息。 等讯息
这还不算什么,更有甚者, 这还不算什么,更有甚者,尽然在循环语句里写下面的代码如 : [Sample-02] Foreach(DataRow row in tabl.select(“”,”ProductID”) …………… clsOraDb.Open(strConn) …………. Next 有人还喜欢玩下面的语句: 有人还喜欢玩下面的语句 [Sample-03] Foreach(DataRow row in tabl.select(“”,”ProductID”) Foreach(DataColumn col in tbl.columns) …………… clsOraDb.Open(strConn)
Next …………. Next 说到这,有人就问啦,我在开发环境下测试一点问题都没有呀?是呀,你是没有问题,我想问的是,你开发环境的测试数据有几笔? 说到这,有人就
问啦,我在开发环境下测试一点问题都没有呀?是呀,你是没有问题,我想问的是,你开发环境的测试数据有几笔?
现在,问题已经知道在哪里,怎么解决 现在,问题已经知道在哪里,怎么解决?
针对[sample-01]做如下处理 注意下面代码 做如下处理,注意下面代码 针对 做如下处理 注意下面代码:
Public Shared Function getOEMPN(ByVal psPN As String, ByRef OEMPN As String) As BSResult
0001 Dim clsResult As New BSResult 0002 Try 0003 clsResult.ResultID = -1 0004 Dim dtResult As New DataTable 0005 Dim Sql As String = String.Empty 0006 Dim clsOraDb As New clsOraClienDb 0007 Dim strConn As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString 0008 clsOraDb.Open(strConn) 注释:这里 Open 后,后面看不到 clsOraDb.Close 注释: 0009 Sql = "SELECT SATBMMBRND.OEMPN FRUNO FROM SATBMMBRND WHERE SATBMMBRND.MATNO = :MATNO" 0010 Dim params() As OracleParameter = {New OracleParameter("MATNO", psPN)} 0011 If clsOraDb.FillDataTable(Sql, dtResult, params) = False Then 0012 Return clsResult 0013 End If 0014 If dtResult Is Nothing Then 0015 Return clsResult 0016 End If 0017 If dtResult.Rows.Count > 0 Then 0018 OEMPN = dtResult.Rows(0)("FRUNO").ToString() 0019 Else 0020 OEMPN = "" 0021 End If 0022 clsResult.ResultID = 1 0088 clsOraDb.Close 注释:后面看到 clsOraDb.Close 注释: 0023 Return clsResult 0024 Catch ex As Exception 0099 clsOraDb.Close 注释:程序异常也看到 clsOraDb.Close 注释: 0025 clsResult.ResultID = -1 0026 Return clsResult 0028 Throw ex 0027 End Try End Function 注意上面的两句代码:0088 行和 0099 行。 注意上面的两句代码
在异常处理的时候,特别提醒两点: 在异常处理的时候 特别提醒两点: 特别提醒两点
一, 你的数据库关闭的时候应该是在代码行 0028 前,而不是后; 你的数据库关闭的时候应该是在代码行 而不是后
有人不习惯(或者一时疏忽 或者一时疏忽)加上 行