关闭sql连接和阅读器

时间:2017-07-01 18:11:10

标签: mysql sql vb.net

我的MariaDB服务器运行用于SQL查询的池连接时出现问题。我知道问题与我的连接没有正确关闭每个查询有关,所以当我抛出1000个查询的循环时,它就会崩溃。

我的所有SQL都运行得很好我只是因为我的代码没有正确关闭而遇到连接耗尽的问题。

所以我们走了。

首先,我的函数是创建SQL连接,以便可以重复使用和调用它,而无需每次都编写它:

Public Function CreateSQLConn() As MySqlConnection
    Dim ConnStr As String
    Dim Conn As MySqlConnection
    ConnStr = "server=*****;user=****;database=****;port=3306;password=****"

    Try
        Conn = New MySqlConnection(ConnStr)
        Conn.Open()
        Return Conn
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Function

这是一个简单的查询,它将DataReader返回给应用程序的调用部分:

Public Function SelectStoreInventoryID(Conn As MySqlConnection, StoreID As String, QTY As Integer, ID As String) As MySqlDataReader
    Dim Cmd As New MySqlCommand
    Dim CmdText As String
    Dim DR As MySqlDataReader

    CmdText = "SELECT id, store_id, product_id, product_price, order_id FROM store_inventory WHERE product_id=@id AND store_id=@storeid LIMIT @qty"
    Cmd.Parameters.AddWithValue("storeid", StoreID)
    Cmd.Parameters.AddWithValue("qty", QTY)
    Cmd.Parameters.AddWithValue("id", ID)
    Cmd.CommandText = CmdText
    Cmd.Connection = Conn
    Try
        DR = Cmd.ExecuteReader
    Catch ex As Exception
        MsgBox(ex.ToString)
        MsgBox(CmdText)
    End Try

    Return DR
End Function

以下是调用上述内容并将其绑定的代码的一部分:

Dim ProductList as MySql.Data.MySqlClient.MySqlDataReader = SelectStoreInventoryID(CreateSQLConn, ComboBox2.SelectedValue, Row.Cells(2).Value, Row.Cells(0).Value)
While ProductList.Read
    InsertVehicleInventory(CreateSQLConn, ComboBox3.SelectedValue, ComboBox1.SelectedValue, ProductList.GetString(2), ProductList.GetString(3), ProductList.GetString(4))
    DeleteStoreInventory(CreateSQLConn, ProductList.GetString(0))
End While

每次尝试找到关闭Datareader和连接的正确方法/地点。在datareader打开时,我无法关闭连接。我想也许在我的查询中将datareader转储到数据表并返回那个......这样我就可以在循环数据之前干净地关闭所有内容。

思想?

0 个答案:

没有答案