Bagaimana saya bisa menangani kesalahan ini: ‘objek tidak dapat dilemparkan dari dbnull ke tipe lain.’?

pemrograman


Halo,

Saya mencoba menyambung ke MYSQLWorkbench DataBase dari VB.NET (Visual Studio) menggunakan kode ini:

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

Apa yang saya coba:

Saya memverifikasi beberapa kali parameter tanpa perubahan apa pun.

Solusi 2

Untuk menambah apa yang Dave katakan, ini bahkan lebih buruk – Anda membuka koneksi ke DB yang tidak pernah dapat digunakan karena hanya disimpan dalam variabel lokal, yang berada di luar cakupan pada akhir event handler Form.Load.

Karena tidak dapat diakses sama sekali di luar metode (sebenarnya semua variabel lokal tidak ada lagi saat metode berakhir) koneksi yang Anda buat sama sekali tidak berguna, dan hanya memakan sumber daya yang langka di server.

Anda harus selalu kami a Using blok di sekitar pembuatan objek DB apa pun (Koneksi, Perintah, Pembaca, dan Adaptor) untuk menutup dan membuangnya secara otomatis ketika blok berakhir:

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

Solusi 1

Kode yang Anda posting tidak mungkin menghasilkan kesalahan itu. Pesan kesalahan mengacu pada mengonversi sesuatu yang diambil dari database dengan nilai bidang DbNull dan Anda mencoba mengonversinya ke tipe lain.

Kode yang Anda posting tidak menjalankan kueri sama sekali. Yang Anda lakukan hanyalah membuka koneksi di acara Form_Load.

Sebagai catatan tambahan, Anda TIDAK boleh membuka koneksi ke database dan membiarkannya tetap terbuka seumur hidup aplikasi Anda. Anda harus membuka koneksi ke database hanya ketika Anda perlu menjalankan kueri, dan menutupnya sesegera mungkin.

Solusi 3

Masalahnya adalah Anda menggunakan perpustakaan kelas MySql.Data Oracle yang sangat bermasalah. Itu tidak dirawat dengan baik dan harus dihindari. Ini tidak kompatibel dengan versi MariaDB yang lebih baru dan kesalahannya sering kali tidak masuk akal seperti yang Anda terima.

Alih-alih beralih menggunakan MySqlConnector yang benar-benar open source. Kodenya sama, Anda hanya perlu mengubah baris Impor di bagian atas setiap modul atau kelas.

コメント

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