gpt4 book ai didi

mysql - "InvalidOperationException : Connection must be valid and open"在 MySqlConnection 上

转载 作者:可可西里 更新时间:2023-11-01 08:23:38 25 4
gpt4 key购买 nike

我正在做一个 VB.Net 项目(第一次,我之前在 VBA 中工作),我似乎无法与 MariaDB/MySQL 建立连接数据库。
我想获取一列的所有行,以将其用作表单中名为 CBClient 的 ComboBox 的源

到目前为止,这是我的代码:

第一类:ClassSQL

Imports MySql.Data.MySqlClient
Imports MySql.Data.Types

Public Class ClassSQL
Public Shared ConfigSQL As String =
"DATABASE=(My actual DB);DATA SOURCE=(IP of the server);USER ID=(UserID);PASSWORD=(Password)"

Public Shared ConnectDB As New MySqlConnection(ConfigSQL)
End Class

还有表单类:

Imports MySql.Data.MySqlClient

Public Class NewDossier
Private Sub NewDossier_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GetCBClient()
End Sub

Sub GetCBClient()
ClassSQL.ConnectDB.Open()

Dim Requete As String = "SELECT NomClient FROM MSClients"
Dim Query As New MySqlCommand(Requete, ClassSQL.ConnectDB)
Dim rs As MySqlDataReader = Query.ExecuteReader

Do While rs.Read
CBClient.Items.Add(rs.GetString("NomClient"))
Loop

ClassSQL.ConnectDB.Close()
End Sub
End Class

在 Form 类的 ClassSQL.ConnectDB.Open() 上我有异常:

InvalidOperationException : Connection must be valid and open

我的连接有问题吗?还是我做错了什么?
有没有办法指定端口?

最佳答案

在 ADO.Net 中,尝试在整个应用程序中重复使用相同的连接对象通常不是一个好主意,因为称为连接池的功能。连接器已经在为您管理它。相反,为大多数查询创建一个新的连接实例确实更好。只需将连接字符串放在手边并重新使用它即可。这与 IDisposable/Using 模式结合使用效果特别好。

此外,最好将查询放在与连接字符串相同的类或模块中,与应用程序的其余部分隔离,其中每个查询都是一个返回数据的函数,并且(通常)接受一个参数告诉它要查找什么数据。

Public Module SQL
'Making this private helps ensure you remember to put database activities here in this class.
Private ConnectionString As String = "DATABASE=(My actual DB);DATA SOURCE=(IP of the server);USER ID=(UserID);PASSWORD=(Password)"

'You could also design this function to return a DataTable object, if Iterator blocks aren't your thing
Public Iterator Function GetMSClients() As IEnumerable(Of String)
Dim Requete As String = "SELECT NomClient FROM MSClients"

Using cn As New MySqlConnection(ConnectionString), _
cmd As New MySqlCommand(Requete, cn)
cn.Open()

Using rdr As MySqlDataReader = cmd.ExecuteReader()
While rdr.Read()
Yield rdr.GetString("NomClient")
End While
End Using
End Using
End Function

End Module

Public Class NewDossier
Private Sub NewDossier_Load(sender As Object, e As EventArgs) Handles MyBase.Load
CBClient.Items.AddRange(SQL.GetMSClients().ToArray())
End Sub
End Class

关于mysql - "InvalidOperationException : Connection must be valid and open"在 MySqlConnection 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53781288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com