Làm cách nào tôi có thể xử lý lỗi này: ‘không thể chuyển đối tượng từ dbnull sang các loại khác.’?

lập trình


Xin chào,

Tôi đang cố gắng kết nối với MYSQLWorkbench DataBase từ VB.NET (Visual Studio) bằng mã này:

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

Những gì tôi đã thử:

Tôi đã xác minh tham số nhiều lần mà không có bất kỳ thay đổi nào.

Giải pháp 2

Để thêm vào những gì Dave nói, điều đó thậm chí còn tệ hơn – bạn mở một kết nối tới DB không bao giờ có thể được sử dụng vì nó chỉ được lưu trữ trong một biến cục bộ, nằm ngoài phạm vi ở cuối trình xử lý sự kiện Form.Load.

Vì nó hoàn toàn không thể được truy cập bên ngoài phương thức (trên thực tế, tất cả các biến cục bộ không còn tồn tại khi phương thức kết thúc) nên kết nối bạn tạo hoàn toàn vô dụng và chỉ chiếm tài nguyên khan hiếm trên máy chủ.

Bạn nên luôn luôn cho chúng tôi một Using khối xung quanh việc tạo bất kỳ đối tượng DB nào (Kết nối, Lệnh, Trình đọc và Bộ điều hợp) để tự động đóng và Vứt bỏ chúng khi khối kết thúc:

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

Giải pháp 1

Mã bạn đã đăng không thể tạo ra lỗi đó. Thông báo lỗi đề cập đến việc chuyển đổi nội dung nào đó được truy xuất từ ​​cơ sở dữ liệu trong đó giá trị trường là DbNull và bạn đang cố chuyển đổi nội dung đó sang loại khác.

Mã bạn đã đăng không thực hiện truy vấn nào cả. Tất cả những gì bạn đang làm là mở một kết nối trong sự kiện Form_Load.

Xin lưu ý thêm, bạn KHÔNG nên mở kết nối tới cơ sở dữ liệu và giữ nó mở trong suốt thời gian tồn tại của ứng dụng. Bạn chỉ nên mở kết nối tới cơ sở dữ liệu khi cần thực hiện truy vấn và đóng kết nối đó càng sớm càng tốt.

Giải pháp 3

Vấn đề là bạn đang sử dụng thư viện lớp MySql.Data rất có lỗi của Oracle. Nó không được duy trì tốt và nên tránh. Nó không tương thích với các phiên bản mới hơn của MariaDB và các lỗi thường vô nghĩa như lỗi bạn nhận được.

Thay vào đó hãy chuyển sang sử dụng MySqlConnector nguồn mở thực sự. Mã giống hệt nhau, bạn chỉ cần thay đổi dòng Nhập ở đầu mỗi mô-đun hoặc lớp.

コメント

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