
VisualBasic2008 で外部のサーバーにあるMySQLに接続できません。
Cnn.Open()の所で、こんなエラーがでます。
Unable to connect to any of the specified MySQL hosts.
MysqlTest.vshost.exe Error: 0 : Unable to connect to any of the specified MySQL hosts.
'MySql.Data.MySqlClient.MySqlException' の初回例外が MySql.Data.dll で発生しました。
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004~
~~
PC内にあるMySQLには接続できるんですが。
外部のサーバーのMySQLには接続できないのでしょうか。
-------コード------------------
Dim sqlStr As String = "SELECT * FROM allitem"
Dim CnnStr As String = "server=xxxxxxxxxxx.com:3306;database=PGTESTDB;User Id=pgtestuser;Password=xxxxxx"
Dim Cnn As MySqlConnection = New MySqlConnection
Cnn = New MySqlConnection(CnnStr)
Cnn.Open()
No.5ベストアンサー
- 回答日時:
まず,MySqlConnectionStringBuilderはMySqlConnectionで利用するためのConnectionStringを,
各種プロパティを設定することで作っていくためのクラスです。
そして,PropertyGridは,対話的にインスタンスのプロパティを設定していくことができるコントロールです。
今回のものは,これらを組み合わせて,ConnectionStringを対話的に作成するためのものになります。
Server, User Id, Passwordなどを入力して,対象サーバーに接続できる文字列を作って,
間違いの無いConnectionStringを作れるかどうか確認してみるのが目的です。
ただ,何度も書いていますが,CLI,つまりはmysqlコマンドから接続できていますか。
先にも書きましたが,エラーメッセージが出る状況は,
サーバーが存在しなかったり,ファイアウォールで接続を拒否された時のものです。
MySqlConnectionで接続する前に,mysqlコマンドで接続できることを確認した方がよいですよ。
この回答への補足
失礼しました、WinXPコマンドプロンプトから下記で接続でき、SHOW DATABASES;で中を確認できます。
またWinXP「管理ツール」の「データソース(ODBC)」からも接続に成功します。
サーバー屋さんにも確認し、「何ら規制はかけてないので、VB2008側の問題だ」と言われてます。
VB2008についてはほとんど初心者程度です。
何とかよろしくお願いいたします。
コマンドプロンプトで-----------------
mysql -h xxxxx.com -u yyyyyy -p
Enter password: zzzzz
貴殿の書かれてたことがやっとどうにか理解でき、やってみたところ下記のエラーが出ました。
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');
色々な勉強になり、知識も増えました。
本当にありがとうございました。
感謝感謝!!!
他の皆様もありがとうございました。感謝しております。
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で繋げることができていなければ,もっと根本の問題になります。
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が入っていない等,そもそもの接続ができない状態の場合に発生するようです。
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
No.1
- 回答日時:
を読むと,ポートの指定はPort=という形で別途指定するようになっています。
なので,
Server=xxxxxxxxxxx.com;database=PGTESTDB;User Id=pgtestuser;Password=xxxxxx
というConnection Stringに変更してみてはどうでしょうか。
この回答への補足
下記どれでも結果は変わらず、つながりません。
困りました。
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が見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外出先からリモートデスクトッ...
-
携帯電話からのアクセス解析
-
リモートデスクトップと動的IP...
-
同ネットワーク内でIIS・FTPに...
-
SSH接続が切れてしまいます
-
ネットワークの最大接続数
-
サンダーバードメールが送受信...
-
IPアドレス127.0.0.1を追加する...
-
VPN接続時のドメイン参加について
-
VPN接続が出来ない…
-
svchost.exeが常時通信されてい...
-
sshでは接続できるのにsftpは接...
-
windows7でのpscpについて
-
TERATERMだけSSH接続できない
-
社内LANからのFTPが繋がりません
-
リモートデスクトップができない件
-
Android端末からのWiFi接続が切...
-
EXCEL VBAで、PnPでCOMポート番...
-
8000番や8080番のポー...
-
スイッチのポート番号について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外出先からリモートデスクトッ...
-
ポリシー等で特定のサイトだけ...
-
VPN接続時のドメイン参加について
-
リモートデスクトップと動的IP...
-
価格コムに接続できません。
-
TERATERMだけSSH接続できない
-
サンダーバードメールが送受信...
-
sshでは接続できるのにsftpは接...
-
ログについて
-
社内LANからのFTPが繋がりません
-
VPN接続確立後、Pingが通らない
-
ネットワークの最大接続数
-
VB2008 で外部のMySQLに接続で...
-
リモートデスクトップができない件
-
リモートデスクトップ接続について
-
同ネットワーク内でIIS・FTPに...
-
macです。サーバに接続できません…
-
携帯電話からのアクセス解析
-
FireFoxを社内で使用する場合の...
-
PPPのデフォルトゲートウェイを...
おすすめ情報