アプリ版:「スタンプのみでお礼する」機能のリリースについて

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()

A 回答 (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

補足日時:2014/09/12 07:46
    • good
    • 1
この回答へのお礼

貴殿の書かれてたことがやっとどうにか理解でき、やってみたところ下記のエラーが出ました。
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');

色々な勉強になり、知識も増えました。
本当にありがとうございました。
感謝感謝!!!

他の皆様もありがとうございました。感謝しております。

お礼日時:2014/09/12 09:32

ついつい慣れている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で繋げることができていなければ,もっと根本の問題になります。

この回答への補足

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

補足日時:2014/09/11 16:53
    • good
    • 0

えーっと,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が入っていない等,そもそもの接続ができない状態の場合に発生するようです。

この回答への補足

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

補足日時:2014/09/11 16:08
    • good
    • 0

> PC内にあるMySQLには接続できるんですが


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

この回答への補足

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

補足日時:2014/09/11 16:05
    • good
    • 0

http://dev.mysql.com/doc/connector-net/en/connec …
を読むと,ポートの指定は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"

補足日時:2014/09/08 19:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!