[ad_1]
こんにちは、
次のコードを使用して、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 オブジェクト (接続、コマンド、リーダー、アダプター) の作成をブロックして、ブロックが終了したときにそれらを自動的に閉じて破棄します。
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 行を変更するだけです。
[ad_2]
コメント