Comment puis-je gérer cette erreur : « l’objet ne peut pas être converti de dbnull vers d’autres types ». ?

la programmation


Bonjour,

J’essaie de me connecter à une base de données MYSQLWorkbench à partir de VB.NET (Visual Studio) en utilisant ce code :

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

Ce que j’ai essayé :

J’ai vérifié plusieurs fois le paramètre sans aucun changement.

Solution 2

Pour ajouter à ce que dit Dave, c’est encore pire : vous ouvrez une connexion à la base de données qui ne peut jamais être utilisée car elle est uniquement stockée dans une variable locale, qui sort de portée à la fin du gestionnaire d’événements Form.Load.

Puisqu’elle n’est pas du tout accessible en dehors de la méthode (en fait, toutes les variables locales n’existent plus à la fin de la méthode), la connexion que vous créez est complètement inutile et occupe simplement les rares ressources du serveur.

Vous devriez toujours nous un Using bloquez la création de tout objet DB (Connexion, Commande, Lecteur et Adaptateur) pour les fermer et les supprimer automatiquement à la fin du bloc :

VB
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

Solution 1

Le code que vous avez publié ne peut pas générer cette erreur. Le message d’erreur fait référence à la conversion de quelque chose récupéré de la base de données où une valeur de champ est DbNull et que vous essayez de convertir cela en un autre type.

Le code que vous avez publié n’exécute pas du tout de requête. Tout ce que vous faites est d’ouvrir une connexion dans l’événement Form_Load.

En remarque, vous ne devriez PAS ouvrir une connexion à la base de données et la garder ouverte pendant toute la durée de vie de votre application. Vous devez ouvrir une connexion à la base de données uniquement lorsque vous devez exécuter une requête et la fermer dès que possible.

Solution 3

Le problème est que vous utilisez la bibliothèque de classes MySql.Data très boguée d’Oracle. Ce n’est pas bien entretenu et devrait être évité. Il n’est pas compatible avec les versions plus récentes de MariaDB et les erreurs sont souvent absurdes comme celle que vous avez reçue.

Passez plutôt à l’utilisation du MySqlConnector véritablement open source. Le code est identique, il suffit de changer la ligne Imports en haut de chaque module ou classe.

コメント

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