¿Cómo puedo manejar este error: ‘el objeto no se puede convertir de dbnull a otros tipos’?

programación


Hola,

Estoy intentando conectarme a una base de datos MYSQLWorkbench desde VB.NET (Visual Studio) usando este código:

Imports System.Data
Imports MySql.Data.MySqlClient
Imports MySql.Data

Public Class Form1

    Dim oCon As MySql.Data.MySqlClient.MySqlConnection


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim sProveedor As String

        sProveedor = "server = localhost; database = vikingos_barberia; user id = root; password = **********; port = 3306"
        oCon = New MySqlClient.MySqlConnection(sProveedor)

        oCon.Open()
        MsgBox("Conexion Exitosa!!")


    End Sub
End Class

Lo que he probado:

Verifiqué varias veces el parámetro sin ningún cambio.

Solución 2

Para agregar a lo que dice Dave, es aún peor: abre una conexión a la base de datos que nunca puede usarse ya que solo se almacena en una variable local, que sale del alcance al final del controlador de eventos Form.Load.

Dado que no se puede acceder a ella en absoluto fuera del método (de hecho, todas las variables locales ya no existen cuando finaliza el método), la conexión que crea es completamente inútil y solo ocupa recursos escasos en el servidor.

Siempre deberías ser un Using bloquee la creación de cualquier objeto de base de datos (Conexión, Comando, Lector y Adaptador) para cerrarlos y eliminarlos automáticamente cuando finalice el bloque:

V.B.
Using con As New SqlConnection(strConnect)
	con.Open()
	Using cmd As New SqlCommand("SELECT iD, description FROM myTable", con)
		Using reader As SqlDataReader = cmd.ExecuteReader()
			While reader.Read()
				Dim id__1 As Integer = CInt(reader("iD"))
				Dim desc As String = DirectCast(reader("description"), String)
				Console.WriteLine("ID: {0}" & vbLf & "    {1}", iD, desc)
			End While
		End Using
	End Using
End Using

Solución 1

El código que publicó no puede generar ese error. El mensaje de error se refiere a la conversión de algo recuperado de la base de datos donde el valor de un campo es DbNull y está intentando convertirlo a otro tipo.

El código que publicó no ejecuta ninguna consulta. Todo lo que estás haciendo es abrir una conexión en el evento Form_Load.

Como nota al margen, NO debe abrir una conexión a la base de datos y mantenerla abierta durante la vida útil de su aplicación. Debería abrir una conexión a la base de datos solo cuando necesite ejecutar una consulta y cerrarla lo antes posible.

Solución 3

El problema es que está utilizando la biblioteca de clases MySql.Data de Oracle, que tiene muchos errores. No está bien mantenido y debe evitarse. No es compatible con las versiones más recientes de MariaDB y los errores suelen ser tan absurdos como el que recibió.

En su lugar, cambie a utilizar MySqlConnector de código verdaderamente abierto. El código es idéntico, solo debes cambiar la línea Importaciones en la parte superior de cada módulo o clase.

コメント

タイトルとURLをコピーしました