私は完全に再開発されたウェブサイトとセールスシステムに取り組んでおり、この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
この関数以下のような何かを呼ばれたときションは、使用可能なデータ・オブジェクトを作成します。
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関数を使用するたびに呼び出され、を挿入/更新と削除のために作成した関数です。次のようになります。
これらの機能をすべて使いやすくするかどうかはわかりませんが、データが必要なファイルごとにコードを減らそうとしていましたが、確信が持てません。
しかし、それはそれをクリアし、私が開閉データベースを(あるいは少なくともしようとして)います
をしたプロセスは、しかし閉鎖されていません。 3つまたは4つの販売プロセスを迅速に連続して実行しても、これらの7つのプロセスがまだ稼動中で追加されている場合、max_connectionsの問題が発生します。
データベース接続の仕組みを完全には理解していないので、私はこれを忘れてしまい、あなたに尋ねなければなりません。もう一度!!
は、誰も私に伝えることができます:
a)は私の接続文字列が正しいです、MySQLのために利用可能なより良い接続がありますか?
b)ODBCConnectionオブジェクトを作成するこのメソッドを使用すると、このような関数内で閉じることができますか?
C)なぜ(CommandBehavior.CloseConnection)は接続を閉じていない(私は手動で接続を閉じる試みた前に、この問題が発生した)
VB.NETタグ – Bueller