【解決方法】「オブジェクトを dbnull から他の型にキャストできません。」というエラーを処理するにはどうすればよいですか?


こんにちは、

次のコードを使用して、VB.NET (Visual Studio) から MYSQLWorkbench データベースに接続しようとしています。

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

私が試したこと:

パラメータを変更せずに何度か確認しました。

解決策 2

Dave の発言に付け加えると、さらに悪いことです。DB への接続を開いたのですが、この接続はローカル変数にのみ保存されているため、決して使用することができず、Form.Load イベント ハンドラーの終了時に範囲外になります。

メソッドの外部ではまったくアクセスできないため (実際、メソッドが終了するとすべてのローカル変数が存在しなくなります)、作成した接続はまったく役に立たず、サーバー上の希少なリソースを占有するだけです。

常に私たちに Using DB オブジェクト (接続、コマンド、リーダー、アダプター) の作成をブロックして、ブロックが終了したときにそれらを自動的に閉じて破棄します。

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

解決策 1

投稿したコードではそのエラーが発生する可能性はありません。 このエラー メッセージは、フィールド値が DbNull であるデータベースから取得したものを変換し、それを別の型に変換しようとしていることを示しています。

投稿したコードはクエリをまったく実行しません。 やっていることは、Form_Load イベントで接続を開くことだけです。

余談ですが、データベースへの接続を開いて、アプリの存続期間中開いたままにしてはいけません。 クエリを実行する必要がある場合にのみデータベースへの接続を開き、できるだけ早く接続を閉じる必要があります。

解決策 3

問題は、Oracle の非常にバグの多い MySql.Data クラス ライブラリを使用していることです。 手入れが行き届いていないので避けるべきです。 新しいバージョンの MariaDB とは互換性がなく、受け取ったエラーのような意味不明なエラーが発生することがよくあります。

代わりに、真のオープンソース MySqlConnector の使用に切り替えます。 コードは同一で、各モジュールまたはクラスの先頭にある Imports 行を変更するだけです。

コメント

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