我正在完全重新開發的網站和銷售系統上工作,並且出人意料地迅速反對此Max_connections問題。MySQL DataConnections未關閉/合併
我張貼了這個問題: Closing/Pooling MySQL ODBC connections 最近,但此後嘗試了一些其他的東西,還是一片空白,但有更多的細節,提供...
我有一個建立了一個相當複雜的銷售過程,並且在創建發票時,我似乎每次都要離開7個「流程」。我已經計算了在創建發票的過程中使用數據連接的次數,取決於幾個條件值,它是7-9,因此實際上數據連接根本不會關閉。
爲了加速編碼,我做了幾個函數來處理我的數據庫連接,所以我會在後面發表。
首先,我的連接字符串是:是
"DRIVER={MySQL ODBC 3.51 Driver}; SERVER=mysql.dc-servers.com; DATABASE=jamieha_admin; UID=USERID; PASSWORD=pWD; OPTION=3;pooled=true;Max Pool Size=100"
裏面我是用打開和關閉和做的東西與數據庫的功能如下:
Function connectionString(sql As String, closeConnection As String) As OdbcConnection
Dim DBConnection As String = ConfigurationManager.ConnectionStrings("dbConnNew").ConnectionString
'this is getting the connection string from web.config file.
Dim oConnection As OdbcConnection = New OdbcConnection(DBConnection) 'call data connection
connectionString = New OdbcConnection(DBConnection)
If closeConnection <> "close" Then _
connectionString.Open() ' open data connection
End Function
此功能給了我一個OdbcConnection連接字符串對象,我可以使用它:
Function openDatabase(sql As String) As OdbcCommand
openDatabase = New OdbcCommand(sql, connectionString(sql, ""))
End Function
This func重刑創建一個可用的數據對象調用的時候做這樣的事情:
Dim stockLevel As OdbcCommand = openDatabase("SQL STATEMENT HERE")
Dim objDataReader As OdbcDataReader = stockLevel.ExecuteReader(CommandBehavior.CloseConnection)
'=== DO STUFF WITH objDataReader ==='
objDataReader.Close()
讀過了嘗試,以確保數據連接進行正常等收盤,我讀了增加(CommandBehavior.CloseConnection)應確保連接被關閉時,不再使用,但是這似乎並沒有被髮生的事情,所以我創建了一個單獨的「closeCOnnection」功能,它看起來像:
Function closeConn()
If connectionString("", "", "close") IsNot Nothing AndAlso connectionString("", "close").State = ConnectionState.Open Then
connectionString("", "close").Close()
connectionString("", "close").Dispose()
End If
End Function
這每一個使用OpenDatabase函數後調用,也內我爲插入/更新和刪除創建的函數,如下所示:
Function insertData(InsertSql As String)
Dim dataInsert = openDatabase(InsertSql, "new")
dataInsert.ExecuteNonQuery()
closeConn()
End Function
我不知道是否使所有這些功能是使我的生活更容易還是困難,但我試圖減少每個在需要數據acceess文件中的代碼,但我不相信它。
然而,已經明確在那裏,當我打開和關閉數據庫(或至少嘗試)
的過程沒有被關閉,雖然。如果我快速連續運行我的銷售流程3到4次,並且這7個流程仍處於運行狀態並添加到該流程中,我就會遇到max_connections問題。
不完全理解數據庫連接是如何工作的,恐怕我對此感到不知所措,因此不得不再次問你......
誰能告訴我:
一)是我的連接字符串是正確的,是有關於MySQL提供更好的連接?
b)使用這種方法創建一個ODBCConnection對象,是否可以在像這樣的函數中關閉它?
C)爲什麼(CommandBehavior.CloseConnection)未關閉連接(這個問題出現之前,我試圖關閉手動連接的連接)
添加了VB.NET標籤 – Bueller 2012-01-09 17:31:32