C#でMySQL操作
Rafysta - C#でMySQLに接続:
http://www2.pf-x.net/~rafysta/memo/wiki.cgi?page=C%23%A4%C7MySQL%A4%CB%C0%DC%C2%B3
どうもMySQLを扱うツールがイマイチ。
phpMyAdminとかが割と一般的なようだけど、サーバにインストールできない場合などもあり。
クライアント側にインストールして、接続設定だけすれば繋げるようなの創れないかな、と思ったのが発端。
結局、時間がなさ過ぎて断念(笑
とはいえ、イイ線までは割と簡単にイケそう。
冒頭で紹介した記事を参考に、.NET ライブラリとして MySQL から提供されていた MySQL Connector をインストールしてみた。
Windows Form にボタンを一つだけ配置。
押下した時に接続して、DB選択して、テストSQLを投げて、結果を受け取るところまでは作れた。
GUI的に使いやすいものにまで昇華させようと思ったら、色んなこと考えなきゃいけないし。
良い勉強にはなりました。
前回の時計同様、C#ならではテクのようなものはほとんど使っていない初歩プログラムレベルですが、そんなでも一応掲載しておこうかと。
Form1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace MySqlConnector { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private MySqlConnection hMySql = null; private void OnClick(object sender, EventArgs e) { string connectionString = String.Format( "server={0};user id={1}; password={2}; database=mysql; pooling=false", "サーバ名","ユーザ名","パスワード"); try { hMySql = new MySqlConnection(connectionString); hMySql.Open(); hMySql.GetSchema(); hMySql.ChangeDatabase("sugarcrmdb"); MessageBox.Show("Connection Success!"); MySqlDataReader reader = null; MySqlCommand cmd = new MySqlCommand("select * from テーブル名", hMySql); try { reader = cmd.ExecuteReader(); while (reader.Read()) { MessageBox.Show(reader.GetString(0)); MessageBox.Show(reader.GetString(1)); MessageBox.Show(reader.GetString(2)); } } catch (MySqlException ex) { MessageBox.Show("Failed to populate database list: " + ex.Message); } finally { if (reader != null) reader.Close(); } } catch (MySqlException ex) { MessageBox.Show("Error connecting to the server: " + ex.Message); } } } }
「サーバ名」「ユーザ名」「パスワード」「テーブル名」は、置き換えてあるので注意。
まず参照したページの第一歩で、参照設定を追加して、using で躓く。
こんな簡単なことでどうして躓くんだ。。。
インストール後に参照設定を追加するところまでは問題なく出来たのに、using したらリンクエラーとなった。
型または名前空間名 'MySQL' が見つかりませんでした。
using ディレクティブまたはアセンブリ参照が不足しています。
上に提示したソースでは勿論修正してありますが、using ディレクティブに指定した Namespace が間違ってた。
× MySQL.***
○ MySql.***
単なる大文字と小文字の違い。
10分ほどもわからなくて悩んだ自分にガッカリ。
その他にも、いろいろ直した。
以下は一例。
○ GetSchema()
× GetDatabases()
どっかのバージョンでメソッド名を変えたものと思われる。
Form1.design.cs の Dispose も追加したが、割愛。
抽出データの確認に MessageBox.Show() (しかも固定添え字で連発)しているのは、ホントの確認のためだけ。
実際にカスタマイズするなら、データベースの選択やテーブルの選択もプログラムで抽出したものの中からプルダウンで選ばせるぐらいはしたいところ。
これがターミナルログインが必要(サーバ想定)となると、もっと色々手間がかかりそうだという印象も。
とにかくホントのサンプルとして。