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