MySQL の利用 インストール インストール時に特に注意点は無い 本稿記述時のバージョンは 6.5.4 で有る (2017 年 11 月現在では 6.10.4 で https://dev.mysql.com/downloads/connector/net/6.10.html よりダウンロード出来る ) 参照設定 インストールが終了すれば Visual Studio で参照の設定を行う 参照の設定画面で MySql.Data.dll を選択する 実際の場所は下記フォルダに成ると思う (32bit 機の場合 ) C: Program Files MySQL MySQL Connector Net 6.9.8 Assemblies v2.0 C: Program Files MySQL MySQL Connector Net 6.9.8 Assemblies v4.0 C: Program Files MySQL MySQL Connector Net 6.9.8 Assemblies v4.5 64bit 機の場合は C: Program Files(x86) にインストールされる筈で有る 参照設定で MySql.Data の ローカルにコピーする 設定を True にして置けば リリース後 MySQL Connector をインストールして居ないクライアントでも 問題無く使用出来る 後 ソースの冒頭部分で 下記の Imports 文を追加すれば名前空間をインポートする事が出来る Imports MySql.Data.MySqlClient 此れで MySqlConnection や MySqlDataReader が使用出来る様に成る
接続文字列の作成 下記に MySqlConnectionStringBuilder を用いて接続文字列を作成するコードを示す ' MySqlConnectionStringBuilder の設定 Dim Br As MySqlConnectionStringBuilder = New MySqlConnectionStringBuilder( ) Br.Server = "localhost" Br.Port = 3306 Br.UserID = "root" Br.Password = "" Br.Database = "test" ' 接続文字列の作成 Dim CnStr As String = Br.ToString( ) 自機の仮想サーバーで既定値を用いて居る場合は Server は localhost Port は 3306 UserID は root Password は無し ( ヌルストリング ) で有る 亦 Database には 接続する mysql データベース名を指定する データベースに接続 下記に MySqlConnection を用いてデータベースに接続するコードを示す ' データベースに接続 Dim Cn As MySqlConnection = New MySqlConnection( ) Cn.Open( ) データベースからデータの取得 下記に test データベースの users テーブルのデータを取得する SQL 文の例を設定するコード示す ' 発行する SQL 文の作成 Dim SqlStr As String = "SELECT * FROM users;" 下記に データベースからデータを読み込んで取得する為に SQL 文とデータベース接続情報を渡して MySqlDataAdapter クラスのインスタンスを生成するコードを示す ' データ取得の為のアダプタの設定 Dim Ad As MySqlDataAdapter = New MySqlDataAdapter(SqlStr, Cn) 下記に データアダプタで取得したデータの結果を DataSet に格納するコードを示す ' 取得したデータを DataSet に格納 Dim Ds As DataSet = New DataSet( ) Ad.Fill(Ds, "user")
DataGridView に表示 下記に DataGridView コントロール ( 名前は dgvdisp) に取得したデータを表示するコードを示す ' DataGridView に取得したデータを表示 dgvdisp.datasource = Ds.Tables(0) dgvdisp.datamember = "user" 上記では 単純に取得したデータをバインディングして DataGridView コントロールに表示して居るが データの値に依りセルの書式を設定する等 より高度な表示を行う場合は 各レコード毎に DataGridViewRow を設定して DataGridView コントロールの Rows に追加して行く方法を採ると良い データベースの切断 下記に 使用済のデータベースへの接続を切断するコードを示す データベースの切断 Cn.Close( ) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ データベースにデータの追加 下記に test データベースの users テーブルにデータを追加する SQL 文の例を設定するコード示す ' 発行する SQL 文の作成 Dim SqlStr As String = "INSERT INTO users(username,age) VALUES("uno",68);" 下記に データベースにデータ追加する為に SQL 文とデータベース接続情報を渡して MySqlCommand クラスのインスタンスを生成するコードを示す ' データ追加の為のコマンドの設定 Dim Cmd As MySqlCommand = New MySqlCommand(SqlStr, Cn) 下記に コマンドを用いて SQL を実行するコードを示す ' SQL を実行 Cmd.ExecuteNonQuery( ) 猶 下記の様に SQL 文にプレースホルダーを用いて データをバインドする事も出来る 大量のデータを追加する場合等に便利で有る Dim SqlStr As String = "INSERT INTO user VALUES(?val1,?val2)" ' プレースホルダーにバインド Cmd.Parameters.AddWithValue("?val1", "uno") Cmd.Parameters.AddWithValue("?val2", 68)
参考 例外処理を施したコード例 ' MySqlConnectionStringBuilder の設定 Dim Br As MySqlConnectionStringBuilder = New MySqlConnectionStringBuilder( ) Br.Server = "localhost" Br.Port = 3306 Br.UserID = "root" Br.Password = "" Br.Database = "test" ' 接続文字列の作成 Dim CnStr As String = Br.ToString( ) ' コネクションの生成と設定 Dim Cn As MySqlConnection = New MySqlConnection( ) Cn.Open( ) Try ' データベースに接続 Cn.Open() ' 発行する SQL 文の作成 Dim SqlStr As String = "SELECT * FROM users;" ' データ取得の為のアダプタの設定 Dim Ad As MySqlDataAdapter = New MySqlDataAdapter(SqlStr, Cn) ' 取得したデータを DataSet に格納 Dim Ds As DataSet = New DataSet( ) Ad.Fill(Ds, "user") ' 取得したデータを DataSet に格納 Dim Ds As DataSet = New DataSet( ) Ad.Fill(Ds, "user") ' DataGridView に取得したデータを表示 dgvdisp.datasource = Ds.Tables(0) dgvdisp.datamember = "user" Catch ex As MySqlException MessageBox.Show(ex.Message) Finally Cn.Close() End Try
トランザクションのコード例 Dim Cn As New MySqlConnection Dim Trans As MySqlTransaction = Nothing ' Server: サーバー IP or FQDN UserID: ユーザー名 Password: パスワード Catalog: データベース名 Dim CnStr As String = "Server= localhost;userid=vbnet;password=vbnet;initial Catalog=vbnet" Try Cn.Open() ' トランザクション開始 Trans = Cn.BeginTransaction Dim SQL As String = "INSERT INTO DEPARTMENT VALUES(?val1,?val2)" Dim Cmd As New MySqlCommand(SQL, Cn) ' プレースホルダーにバインド Cmd.Parameters.AddWithValue("?val1", 6) Cmd.Parameters.AddWithValue("?val2", "DUMMY1") ' SQL を実行 Cmd.ExecuteNonQuery() ' プレースホルダーへのバインドをクリアしてから改めてバインド Cmd.Parameters.Clear() Cmd.Parameters.AddWithValue("?val1", 5) Cmd.Parameters.AddWithValue("?val2", "DUMMY2") ' SQL を実行 ( 此処で一意制約違反発生!) Cmd.ExecuteNonQuery() ' コミット Trans.Commit() MessageBox.Show(" 接続!!") Catch ex As MySqlException If (Trans IsNot Nothing) Then ' トランザクションが開始していればロールバック Trans.Rollback() End If MessageBox.Show(ex.Message) Finally Cn.Close() End Try
DAO を用いたコーディング例 下記に データベース list から名簿情報を取得し DataGridView に表示するメソッド ( プロシージャ ) を示す 此処で使用するデータベース list のテーブル list_table は 下記の通りで有る name varchar(30) not null age smaillint not null gender varchar(2) not null Private Sub GetListData() Dim SQL As String Dim Dr As MySql.Data.MySqlClient.MySqlDataReader Dim Db As DataBase Dim Row As String( ) ' SQL 文 ' SELECT 結果 ' データベースオブジェクト ' DataGridView に追加する 1 行 ' DataGridView の内容を消去 dgvlist.rows.clear( ) ' データベースの初期設定 ( ホスト名 ポート番号 データベース名 ユーザ ID パスワード ) ' 自分の環境に応じて変更すること Db = New DataBase("localhost", "3306", "list", "root", "password") ' データベースに接続 Db.Open() ' 名簿データを取得する SQL 文作成 SQL = "" SQL = SQL & "SELECT " SQL = SQL & " name, " SQL = SQL & " age, " SQL = SQL & " gender " SQL = SQL & "FROM " SQL = SQL & " list_table;" DataBase オブジェクトを使用するには Microsoft DAO x.x Object Library を参照設定する必要が有る? ' SQL 文実行して結果取得 Dr = Db.ExecuteQuery(SQL) While Dr.Read() ' 配列を初期化 ReDim Row(2) Row(0) = Dr("name") ' 読み込んだ行の name 列を取得 Row(1) = Dr("age") ' 読み込んだ行の age 列を取得 Row(2) = Dr("gender") ' 読み込んだ行の gender 列を取得 ' DataGridView に 1 行追加 dgvlist.rows.add(row) End While ' データベースを閉じる Db.Close( ) End Sub