0

VS 2013 および MySQL で実行されている私のプロジェクトでは、パブリック変数 conn を mysqlconnection として宣言し、プロジェクト全体で同じ接続を使用してデータベース操作を実行しています。

    Public conn As New MySqlConnection

     Public Sub createConnection()
            If conn.State = ConnectionState.Closed Then
                conn.ConnectionString = parseConfigXML()
                conn.Open()
            End If
        End Sub

Public Function parseConfigXML()
        Try
            Dim m_xmld As XmlDocument
            Dim m_nodelist As XmlNodeList
            Dim m_node As XmlNode
            m_xmld = New XmlDocument()
            m_xmld.Load("../../../appconfig.xml")
            m_nodelist = m_xmld.SelectNodes("/app/config")
            Dim hostname, dbname, dbuser, dbpassword As String
            hostname = ""
            dbname = ""
            dbuser = ""
            dbpassword = ""
            For Each m_node In m_nodelist
                hostname = m_node.ChildNodes.Item(0).InnerText.ToString
                dbname = m_node.ChildNodes.Item(1).InnerText.ToString
                dbuser = m_node.ChildNodes.Item(2).InnerText.ToString
                dbpassword = m_node.ChildNodes.Item(3).InnerText.ToString
            Next
            Dim connectionString = "Database=" & dbname & "; Data Source=" & hostname & "; User Id=" & dbuser & ";Password=" & dbpassword & "; Character Set=utf8"
            Return connectionString

        Catch errorVariable As Exception
            MsgBox("Oops, An error occured: " & errorVariable.ToString)
        End Try
    End Function

接続が必要なときはいつでも、次のように使用します。

 Try
            Dim query As String = "select * from tbl_lang where lang_status=1"
            Dim cmd As New MySqlCommand(query, conn)
            Dim dr As MySqlDataReader
            dr = cmd.ExecuteReader
            If dr.HasRows Then
                Do While dr.Read
                    cmb.Items.Add(dr.GetString("lang_name"))
                Loop
            End If
            cmb.SelectedItem = "English"
            If Not dr.IsClosed Then dr.Close()
        Catch ex As Exception
            lbl_error.text="Oops, An error occured: " & ex.ToString
        End Try

コードが再利用されると、常にこの問題が発生します。この接続に対して既に開いているデータリーダーがあります。

それに対処する最善の方法は何ですか?誰かが、すべてのクエリに新しい接続を開いてから閉じると述べていました。どういうわけか、パフォーマンスの問題が発生する可能性があるため、納得できません。

問題を解決する最善の方法を提案してください。

4

0 に答える 0