我的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转储到数据表并返回那个......这样我就可以在循环数据之前干净地关闭所有内容。
思想?