VB で超簡単 MySQL アクセス

検証環境 Fujitsu FMV-W630(Pen4(530)3.4GHz/3GB)
WindowsVista Ultimate(6.0.6002 SP2,v.659 Build 6002)
VisualStudio2008Pro(VB) 9.0.30729.1SP/.NET Framework 3.5SP1

猿頁 » Webサーバ構築記 からの派生です。

まあいろいろありまして、いま私の机の横には、メインマシンとサーバマシンが縦に積み重なっています。サーバマシンの中では WordPress という PHP 製の blog システムが稼働し、この猿頁は WordPress 上で運用されています。
WordPress はエントリやユーザー、アクセス状況といった情報の保持に MySQL という DB エンジンを使っています。

ふつー、このWordPresに関する機能を自作するなら WordPress プラグインの仕様に則って PHP で作成するのが筋なんですが。
Woopra というアクセス解析サービスが、解析結果の表示に ローカルの EXE を使うことを知った時に、

なんだ別にどんなアプローチでもアリじゃん。

と目から鱗が。

つことで、VB から MySQL を直接読んで WordPress のデータをイジってみようとか思ってみました。
読むだけなら意外とちょー簡単でちょーびっくり。


0. 参考資料

MySQL は、サイト内にリファレンスマニュアルが用意されています。
英語版は 3.23/4.0/4.1、5.0、5.1、5.4、6.0 とバージョンごとに用意されていますが、日本語版は 4.1 と 5.1 の 2 バージョンだけのようです。
また、日本語版の 5.1 と英語版の 5.1 では記載内容が微妙に違います。どうも日本語版は 4.1 から 5.1 を派生して起こした時に旧版の内容や構成が残ってしまっているような感じです。

私のサーバマシンでは 5.0 が稼働していますので、日本語でさっくり調べたい時は

  MySQL :: MySQL 5.1 リファレンスマニュアル

で。
なんか実装と説明が合わなくて「?」となった時は、英語がめんどくさいですが

  MySQL :: MySQL 5.0 Reference Manual

で調べていけばなんとかなりそうな気がします。
chm(Windows Help)ファイルでも提供されていますので、いちいち Web で検索するのがめんどい方はそっちを入手してもいいかもしれません。

1. Connector/Net 6.0 の入手とインストール

VS2008 では、DB へのアクセスは ADO.NET という仕組みを使って行うのが一般的です。
ADO.NET は、簡単に言っちゃうと、いろんな DB へアクセスするプログラミングの手順やコードをなるべく統一しようよ?という仕組みなわけですね。
一方で、実際に各種 DB へのアクセス方法は意外とさまざまでして、これを 統一っぽくするには、DB ごとに、ADO,NET と実際の DB を橋渡しするプログラムが必要になります。
このプログラムをデータプロバイダと呼びます。まあ、特定の DB を使ったプログラムを作成するためのプラグインとかアドインとかアドオンとか、なんかそんな感じでイメージしていただければいいのではないかと思います。

つことで MySQL 用のデータプロバイダ。
まずはこいつを Visual Studio IDE に組み込むことにします。

MySQL 用のデータプロバイダは「MySQL Connector/NET」という名前で、

  MySQL :: Download Connector/Net 6.0

で提供されています。今日の時点では、6.0.3 が最新ですね。
このページから、「Windows Binaries (ZIP)」をダウンロードします。
入手できたファイルは mysql-connector-net-6.0.3.zip 、これを解凍すると mysql.data.msi というインストーラが出てきますので、ダブルクリックで実行、さっくりインストールしてしまいます。

実行できない場合は、Windows インストーラを最新にする必要があるのかもしれません。
Vista では標準で 4.0 が組み込まれているはずですが、Windows Server 2003 や XP な方は、3.0 とかそのへんを探してインストールしてみるといいように思います。

また、VS2008 Express Edition では、SQL Server / Access 以外のデータプロバイダは使用できませんので、そのへんもご注意ください。

2. サーバエクスプローラの調整

Connector/NET のインストールが終わったら、次。
Visual Studio IDE が、MySQL サーバにアクセスできるよう設定します。

今回の私の場合は、VS IDE はメインマシン (salvage-PC)、MySQL はサーバマシン (MiscnotesWebSer) にそれぞれインストールされています。
ので、VS IDE から MiscnotesWebSer というコンピュータを見に行けるような設定が必要となります。
MySQL と 開発環境が同じマシンの場合は、たぶんこの項は省略できます。

  1. VS IDE を起動します。
     
  2. サーバエクスプローラが表示されていない場合は、メニューから[表示]-[サーバーエクスプローラ]で表示させます。


     

  3. サーバーエクスプローラのツリーから[サーバー]を右クリック、[サーバーの追加...]をクリックします。


     

  4. 「サーバーの追加」ダイアログが表示されますので、[コンピュータ]にコンピュータ名を入力します。

    サーバマシンにアクセスするには、メインマシンとは違うユーザ名/パスワードが必要となりますので、コンピュータ名を入力し終わったら[OK]ではなく、「別の名前で接続…」リンクをクリックします。
     

  5. 「接続するユーザー」ダイアログが表示されますので、サーバマシンに登録してあるユーザー名とパスワードを入力して[OK]をクリックします。


     

  6. 「サーバーの追加」ダイアログに戻りますので、[OK]をクリックします。
    このタイミングで初めて、5)で入力したユーザ名とパスワードを使ってサーバマシンに接続に行きます。ユーザ名やパスワードの登録が間違っている場合は、ここで初めてエラーが表示されます。

    エラーが表示されてしまった場合は、再度「接続するユーザー」ダイアログを表示させて正確なユーザ名/パスワードを入力し直します。
     

  7. 正常に追加できると、サーバエクスプローラの[サーバ]ノードの下に、[MiscnotesWebSer]が追加表示されます。


     

  8. 続いてサーバエクスプローラのツリーから[データ接続]を右クリック、[接続の追加...]をクリックします。


     

  9. 9) 「データソースの選択」ダイアログが表示されますので、「MySQL Database」を選択し、[続行]をクリックします。


     

  10. 「接続の追加」ダイアログへ移行します。ここで、「サーバ名」「ユーザ名」「パスワード」を入力します。

    サーバ名は~7)までで作成したサーバ名を入力。ユーザ名とパスワードはサーバマシンのではなく、MySQL のユーザ名とパスワードを入力します。
    この 3 つを入力したら、[テスト接続]をクリックして接続を試してみます。「テスト接続に成功しました」と表示されれば成功です。

    「テスト接続に成功しました」メッセージボックスは[OK]をクリックして閉じ、「接続の追加」ダイアログに戻ります。
    今回は個人的なツール作成が目的なのでセキュリティなどは斟酌しません。ですから、めんどくさくないように[Save my password]にチェックをつけます。これで、何かとパスワード入力を求められたりすることがなくなります。
    テスト接続に成功すると、[Database name]のコンボボックスには接続可能なデータベース名の一覧が表示されるようになっているはずです。今回は WordPress のデータをイジりたいので、「wordpress」を選択します。

    で、最後に[OK]をクリックします。 
     

  11. 正常に追加できると、サーバエクスプローラの[データ接続]ノードの下に、[MiscnotesWebSer(wordpress)]が追加表示されます。

    [MiscnotesWebSer(wordpress)]ノードを広げてみると、その下に MySQL – wordpress データベースの中身が取得表示されていることがわかります。

3. データセットの作成

VS IDE の設定が完了したら、新しく Windows フォームアプリケーションプロジェクトを作成します。
このへんの操作説明は省略しますはっはっは。

引き続き、MySQL へのアクセスをするデータセットを作成します。

  1. ソリューションエクスプローラのプロジェクト名(この例であれば[smpl001_AccessMySQL])を右クリック、[追加]-[新しい項目]と選択します。


     

  2. 「新しい項目の追加」ダイアログが表示されますので、[カテゴリ]から[データ] → [テンプレート]から[データセット]を選択し、[追加]をクリックします。

    VS IDE に作成されたデータセットが表示されます。


     

  3. サーバエクスプローラから、アクセスしたいテーブルをデータセットウィンドウにドラッグ & ドロップします。
    すると、確認ダイアログが表示されます。

    何を言っているのかわかりにくいんですが、要は、DB のユーザ名やパスワードなどをプロジェクトの中に埋め込んじゃうけどいいかい?という確認です。
    なんでそんなことを聞いてくるかというと、テキストエディタなどで簡単に見れるようになってしまうのでセキュリティがちょいやばになってしまうからなんですね。
    今回はセキュリティとかあまり気にしませんので、気軽に[はい]をクリックします。
    業務上のアプリケーションだったり、不特定多数への公開を前提とする場合には、このへんは少し考えたほうがいいかもしれません。
     

  4. ドラッグしたテーブルのデータテーブルが作成されます。


     

  5. タブ表示欄右端の[×]をクリックします。
     
  6. 「以下の項目への変更を保存しますか?」というダイアログが表示されますので、[はい]をクリックします。

    VB2005 の頃の話になりますが、データセットは保存まわりが少々不安定だったような思い出があります。Ctrl+S では修正の一部が保存されなかったり、修正を繰り返していくうちにファイルが再読み込みできないような状態になったりしたんですね。
    VB2008 になってからはまだそんな被害には遭遇していませんが、私はなるべくこまめに保存、Ctrl+Sではなく必ずファイルを閉じて完全に保存するようなクセがついています。
     

  7. 作成したデータテーブルが、正常に MySQL にアクセスできるかどうかを確認します。
    ソリューションエクスプローラから[DataSet1.xsd]をダブルクリックし、もう一度データセットウィンドウを表示させます。
     
  8. データセットウィンドウの[wp_session_manager]を右クリックし、[データのプレビュー]をクリックします。


     

  9. 「データのプレビュー」ダイアログが表示されますので、[プレビュー]をクリックします。
    MySQL テーブルの内容が表示されれば、正常にアクセスできていることの確認となります。

    [閉じる]をクリックして、 「データのプレビュー」ダイアログを閉じます。

4. DataGridView への接続

せっかくですので、作成したデータセットを使って Windows フォームにデータを表示するプログラムも作ってみます。

  1. Form1 に、ツールボックスから DataGridView コントロールを載せます。


     

  2. DataGridView コントロールを Form1 に載せると、[DataGridView タスク]というタイトルのスマートタグが自動的に表示されます。


     

  3. [DataGridView タスク]スマートタグの[データソースの選択]コンボボックスをプルダウンし、[他のデータソース]-[プロジェクトデータソース]-[DataSet1]-[wp_session_manager]をクリックします。


     

  4. [データソースの選択]コンボボックスに[WpsessionmanagerBindingSource]と表示され(全部表示されず「Wpsessionmanager」のような表示になっているかもしれません)、DataGridView コントロールに MySQL のテーブル wp_session_manager の各フィールドが列として表示され、フォームデザイナウィンドウの下の方に「DataSet1」「WpsessionmanagerBindingSource」「Wp_session_managerTableAdapter」の 3 つのコンポーネントが表示されますが、別になんのことだかわからなくてもかまいません。


     

  5. あとついでに、追加/編集/削除をチェックをはずしておきます。

    今回はデータの表示を確認したいだけですので、まちがって書き換えたりしないようにしておきたい、ということですね。
    さらについでに、[親コンテナにドッキングする]も一度クリックし、DataGridView コントロールがフォーム全体に広がるようにしておきます。

5. 実行

以上でプログラミング完了。1 行もコードを書いていませんが、これだけで DB の中身を表示できるプログラムが完成しました。
F5 を押して、実行してみます。

おおー、ちゃんと表示されるではないですか。

6. UnixTimeの変換

ここからおまけ。

MySQL では、日時の管理によく UnixTime という考え方を使うようです。
最初「UnixTime という型なのか?」と思ったんですが、内部的にはただの int(11) のようでよくわかりません。

でもまあ WordPress でも日付は UnixTime 管理みたいですし、いろいろ調べてみると MySQL を使ったアプリケーションではセオリーとしてよく使われているみたいですし、MySQL そのものに UnixTime を対象とした変換関数も用意されているという、なんとなく中途半端な対応となっているようです。

上記の作成例でも UnixTime フィールドはがっちり表示されているわけですが、実際に何月何日なのかがよくわかりません。

ので、データテーブルを少し修正して、人間にわかる形式での表示に差し替えてみます。

  1. 先ほど作成した「DataSet1.xsd」のウィンドウを表示させます。
     
  2. [wp_session_manager]を右クリックし、[構成...]をクリックして「TableAdpter構成ウィザード」ダイアログを表示させます。


     

  3. [クエリビルダ]ボタンをクリックして、「クエリビルダ」ダイアログを表示させます。
     
  4. Select 文の「unixtime」を、「FROM_UNIXTIME(unixtime) as vistime」に書き換えます。
     
  5. [クエリの実行]ボタンをクリックして、無事に表示できれば成功です。


     

  6. [OK]をクリックして「クエリビルダ」ダイアログを閉じ、[完了]を押して「TableAdpter構成ウィザード」ダイアログを閉じます。
     
  7. Form1 をデザイナウィンドウで開き、DataGridViewの[DataGridViewタスク]スマートタグの[データソースの選択]を、一度「なし」に選択し、再度「WpsessionmanagerBindingSource」を選択し直します。
     

これで完了。実際に実行して表示を確認してみます。

よーし。ちゃんとわかりやすい表記になりましたね。


MySQL のマニュアルを読むと、Connector/Net の上で動作する「MySQL Visual Studio プラグイン」なるものがあるそうなんですが。

  MySQL :: MySQL 5.1 リファレンスマニュアル :: 24.3 MySQL Visual Studio プラグイン

これ、実際にはどこにも見つかりません。
ガンバって探してみたんですが、見つかったのは古いミラーサイトでの古いバージョンのみでした。

  MySQL AB :: MySQL Visual Studio Plugin

どうも Connector/Net が5 → 6 になった時に統合されたか、あるいは単に提供をやめてしまったかな感じです。
実際、Connector/Net で十分用は足りるので、なくてもかまわないような気もします。

コメントを投稿