• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB2008 で外部のMySQLに接続できません)

VB2008で外部のMySQLに接続できないエラーが発生

このQ&Aのポイント
  • VisualBasic2008で外部のサーバーにあるMySQLに接続できず、エラーが発生しています。
  • PC内のMySQLには接続できますが、外部のサーバーのMySQLには接続できません。
  • コードの一部にあるCnn.Open()でエラーが発生し、MySQLのホストに接続できないというエラーメッセージが表示されます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

まず,MySqlConnectionStringBuilderはMySqlConnectionで利用するためのConnectionStringを, 各種プロパティを設定することで作っていくためのクラスです。 そして,PropertyGridは,対話的にインスタンスのプロパティを設定していくことができるコントロールです。 今回のものは,これらを組み合わせて,ConnectionStringを対話的に作成するためのものになります。 Server, User Id, Passwordなどを入力して,対象サーバーに接続できる文字列を作って, 間違いの無いConnectionStringを作れるかどうか確認してみるのが目的です。 ただ,何度も書いていますが,CLI,つまりはmysqlコマンドから接続できていますか。 先にも書きましたが,エラーメッセージが出る状況は, サーバーが存在しなかったり,ファイアウォールで接続を拒否された時のものです。 MySqlConnectionで接続する前に,mysqlコマンドで接続できることを確認した方がよいですよ。

okidsaya555
質問者

お礼

貴殿の書かれてたことがやっとどうにか理解でき、やってみたところ下記のエラーが出ました。 Authentication with old password no longer supported. use 4.1 style passwords 検索してみたら、ここに詳しくのってました、ターゲットのMySQLはver5.1.73です。 http://d.hatena.ne.jp/hilapon/20131204/1386151837 説明にある通り、下記実行してみたら、接続できるようになりました。 set session old_passwords = 0; set password for 'xxxxx'@'%' = password('yyyyyyyy'); 色々な勉強になり、知識も増えました。 本当にありがとうございました。 感謝感謝!!! 他の皆様もありがとうございました。感謝しております。

okidsaya555
質問者

補足

失礼しました、WinXPコマンドプロンプトから下記で接続でき、SHOW DATABASES;で中を確認できます。 またWinXP「管理ツール」の「データソース(ODBC)」からも接続に成功します。 サーバー屋さんにも確認し、「何ら規制はかけてないので、VB2008側の問題だ」と言われてます。 VB2008についてはほとんど初心者程度です。 何とかよろしくお願いいたします。 コマンドプロンプトで----------------- mysql -h xxxxx.com -u yyyyyy -p Enter password: zzzzz

すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

ついつい慣れているC#で書いてしまいましたので,VBに直しておきます。 PropertyGridとButtonを配置して,Form1.vbに以下のコードを記述します。 # ついでに,Close()をClone()と間違えていた部分を修正しています。 Private _mscsb As New MySql.Data.MySqlClient.MySqlConnectionStringBuilder Protected Overrides Sub OnLoad(e As EventArgs) PropertyGrid1.SelectedObject = _mscsb MyBase.OnLoad(e) End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim conn As MySql.Data.MySqlClient.MySqlConnection = Nothing Try conn = New MySql.Data.MySqlClient.MySqlConnection(_mscsb.ConnectionString) conn.Open() If conn.Ping() Then MessageBox.Show(Me, "Ping 成功") Else MessageBox.Show(Me, "Ping 失敗") End If Catch ex As Exception MessageBox.Show(Me, ex.Message, ex.GetType().Name) Finally If conn IsNot Nothing Then Try conn.Close() Catch End Try Try Dim disposable As IDisposable = conn disposable.Dispose() Catch End Try conn = Nothing End If End Try End Sub ただ,根本的な部分で,CLIで繋げることができるか,というのは重要です。 CLIでなくても,例えばMySql Workbenchで繋げることができていなければ,もっと根本の問題になります。

okidsaya555
質問者

補足

記述いただいたまま作ってみました。 ボタンを押すと。「Ping 成功」と表示されます。 よく意味がわからないのですが.....

すると、全ての回答が全文表示されます。
回答No.3

えーっと,CLIでの接続はできるんですよね。 WinForms アプリケーションを1つ作成し,PropertyGridとButtonを配置し, NuGetコンソールから Install-Package MySql.Dataして,Form1.csに, private MySql.Data.MySqlClient.MySqlConnectionStringBuilder _mscsb; protected override void OnLoad (EventArgs e) { _mscsb = new MySql.Data.MySqlClient.MySqlConnectionStringBuilder(); propertyGrid1.SelectedObject = _mscsb; base.OnLoad(e); } private void button1_Click (object sender, EventArgs e) { MySql.Data.MySqlClient.MySqlConnection conn = null; try { conn = new MySql.Data.MySqlClient.MySqlConnection(_mscsb.ConnectionString); conn.Open(); if (conn.Ping()) { MessageBox.Show(this, "Ping 成功"); } else { MessageBox.Show(this, "Ping 失敗"); } } catch (Exception ex) { MessageBox.Show(this, ex.Message, ex.GetType().Name); } finally { if (conn != null) { try { conn.Clone(); } catch { } try { ((IDisposable)conn).Dispose(); } catch { } } } } のように書いて,ConnectionStringを色々調整してみるとよいかもしれません。 ちなみに, Unable to connect to any of the specified MySQL hosts. は,Server (host) に記述したマシンにMySQLが入っていない等,そもそもの接続ができない状態の場合に発生するようです。

okidsaya555
質問者

補足

すみません、コードを見ると「C」のようですが、「C」は解かりません。 申し訳ありません。

すると、全ての回答が全文表示されます。
  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.2

> PC内にあるMySQLには接続できるんですが Windowsですか。 > 外部のサーバー linux/unixでしょうか。 ちょっと気になる点は > database=PGTESTDB 大文字? Windowsだと多分大文字小文字の区別はしてないと思いますが、linux/unixでは区別する設定になっていると思います。 http://d.hatena.ne.jp/wd3ie/20110309/1299647373 http://b.0218.jp/20121014022533.html

okidsaya555
質問者

補足

サーバー側をすべて小文字にしてやってみましたが、変化ありません。 大文字小文字の問題ではないようです。

すると、全ての回答が全文表示されます。
回答No.1

http://dev.mysql.com/doc/connector-net/en/connector-net-connection-options.html を読むと,ポートの指定はPort=という形で別途指定するようになっています。 なので, Server=xxxxxxxxxxx.com;database=PGTESTDB;User Id=pgtestuser;Password=xxxxxx というConnection Stringに変更してみてはどうでしょうか。

okidsaya555
質問者

補足

下記どれでも結果は変わらず、つながりません。 困りました。 Dim CnnStr As String = "Server=xxxxxxx.com;database=PGTESTDB;User Id=pgtestuser;Password=xxxxx" Dim CnnStr As String = "Server=xxxxxxx.com;Port=3306;database=PGTESTDB;User Id=pgtestuser;Password=xxxxx"

すると、全ての回答が全文表示されます。

関連するQ&A