提问人:arjunagil 提问时间:10/24/2022 更新时间:10/24/2022 访问量:382
连接必须有效且在 Visual Basic .NET 中处于打开状态
Connection must be valid and open in visual basic .net
问:
所以我正在尝试通过 MySql 和 Visual Studio 连接到数据库,但我收到那个错误,我已经尝试了我能做的一切,所以在这里问是我最后的资源。这是我的代码
Imports MySql.Data.MySqlClient
Public Class Login
Friend conexionBD = New MySqlConnection
Friend sServidor As String = "localhost"
Friend susuario As String = "root"
Friend sclave As String = ""
Friend sBaseDatos As String = "bd_usuarios"
Friend cmdUsuarios As MySqlCommand
'Friend dtUsuarios As New DataTable
Friend sSqlusuario, slogin, sNombres, sApellidos, scontrasena As String
Private Property sNombre As Object
Private Sub btn_aceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_aceptar.Click
'Dim cmdUsuarios As MySqlConnection
'Dim dtUsuarios As New DataTable
slogin = ""
sclave = ""
If txt_usuario.Text = "" Then
MsgBox("El login no puede estar en blanco")
txt_usuario.Focus()
ElseIf txt_clave.Text = "" Then
MsgBox("La clave no puede estar en blanco")
txt_clave.Focus()
Else
' conexion a la base de datos bd_usuarios()
Try
sSqlusuario = "SELECT * FROM usuario WHERE usuario = '" & txt_usuario.Text & "';"
cmdUsuarios = New MySqlCommand()
cmdUsuarios.Connection = conexionBD
cmdUsuarios.CommandType = CommandType.Text
Dim ConsultaSQL As System.Data.IDataReader
ConsultaSQL = cmdUsuarios.ExecuteReader()
While ConsultaSQL.Read
'Ejecuto la consulta y asigno el resultado
slogin = ConsultaSQL("Usuario")
sclave = ConsultaSQL("clave")
End While
If slogin = txt_usuario.Text Then
If sclave = txt_clave.Text Then
MessageBox.Show("Bienvenido al Sistema", "Sistema")
Else
MsgBox("clave errada o no encontrada")
txt_clave.Focus()
ConsultaSQL.Close()
conexionBD.Close()
End If
Else
MessageBox.Show("Usuario no existe")
txt_usuario.Focus()
ConsultaSQL.Close()
conexionBD.Close()
End If
Catch ex As Exception
conexionBD.Close()
MsgBox("Error" & vbCrLf & ex.Message.ToString)
End Try
End If
End Sub
Private Sub btn_cancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cancelar.Click
conexionBD.Close()
Application.Exit()
End Sub
Public Function bd_usuario()
Try
'Dim conexion = New MySqlConnection()
conexionBD.ConnectionString = "server=" & sServidor & ";" & "user id=" & susuario & ";" & "password=" & sclave & "; database= " & sBaseDatos & "; port=3306;"
conexionBD.Open()
Return True
Catch ex As Exception
MessageBox.Show("No se puede conectar con la base de datos")
End
End Try
End Function
Private Sub Frm_login_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub
End Class`
小提示:
在第一次“尝试”之前,我尝试放置conexionBD.Open(),结果只是得到“连接属性未设置或为空”,从那里我也试图看看我是否可以修复那个,但没有。希望你能帮到我,这是我第一次使用VB
答:
1赞
jmcilhinney
10/24/2022
#1
你有这个:
Friend conexionBD = New MySqlConnection
还有这个:
cmdUsuarios = New MySqlCommand()
cmdUsuarios.Connection = conexionBD
还有这个:
ConsultaSQL = cmdUsuarios.ExecuteReader()
该代码的问题应该很明显。您设置了命令的属性,但从未设置该连接或调用该连接。你有这个方法:Connection
ConnectionString
Open
Public Function bd_usuario()
Try
'Dim conexion = New MySqlConnection()
conexionBD.ConnectionString = "server=" & sServidor & ";" & "user id=" & susuario & ";" & "password=" & sclave & "; database= " & sBaseDatos & "; port=3306;"
conexionBD.Open()
Return True
Catch ex As Exception
MessageBox.Show("No se puede conectar con la base de datos")
End
End Try
End Function
这两者都可以,但您从不调用该方法,因此两者都无法完成。如果您要使用该方法,请调用它。在调用之前调用它。ExecuteReader
一个更好的主意是在使用它们的地方创建所有 ADO.NET 对象,包括连接。将连接字符串放在公共位置,然后在要使用它们的位置创建连接、命令、数据适配器和数据读取器对象,例如
Private connectionString As String = New MySqlConnectionStringBuilder With {.Server = "server name",
.Database = "database name",
.UserID = "user name",
.Password = "password"}.ConnectionString
Private Sub DoSomething()
Using connection As New MySqlConnection(connectionString),
command As New MySqlCommand("SELECT * FROM SomeTable WHERE SomeColumn = @SomeColumn", connection)
command.Parameters.Add("@SomeColumn", MySqlDbType.VarChar, 50).Value = someValue
connection.Open()
Using reader = command.ExecuteReader()
While reader.Read()
'...
End While
End Using
End Using
End Sub
请注意块、连接字符串生成器的使用以及使用参数(而不是字符串连接)将值插入到 SQL 代码中。由于连接和数据读取器是使用语句创建的,因此它们将在相应块的末尾隐式释放和关闭。Using
Using
评论
ConnectionString
bd_usuario
ExecuteReader