スタンダードな C# から ODBC を使用した読み取り処理のテンプレートです。
using System; using System.Data.Odbc; namespace MySQL { class Program { static void Main(string[] args) { // 新しい OdbcConnection オブジェクトを作成 OdbcConnection myCon = CreateConnection(); if (myCon == null) { Console.WriteLine("処理が異常終了しました"); return; } //--------------------------------------------------- // レコードセットを取得する為の SQL を準備 string myQuery = "SELECT 社員マスタ.*,DATE_FORMAT(生年月日,'%Y-%m-%d') as 誕生日 from 社員マスタ"; // SELECT 実行用のオブジェクトを作成 OdbcCommand myCommand = new OdbcCommand(); // 実行する為に必要な情報をセット myCommand.CommandText = myQuery; myCommand.Connection = myCon; // 実行後にレコードセットを取得する為のオブジェクトを作成 OdbcDataReader myReader; // ここで SELECT を実行してその結果をオブジェクトに格納する myReader = myCommand.ExecuteReader(); // 読み出し // Rewad メソッドは、行が存在する場合は true、それ以外の場合は false を返します while (myReader.Read()) { // 文字列 Console.Write(GetValue(myReader, "社員コード") + " : "); Console.Write(GetValue(myReader, "氏名") + " : "); // 整数 Console.Write(GetValue(myReader, "給与") + " : "); // 日付 Console.Write(GetValue(myReader, "作成日") + " : "); Console.Write(GetValue(myReader, "更新日") + " : "); Console.Write(GetValue(myReader, "生年月日") + " : "); Console.Write(GetValue(myReader, "誕生日")); Console.WriteLine(); } myReader.Close(); //--------------------------------------------------- EndConnection(myCon); } // ****************************************************** // 接続終了 // ****************************************************** static void EndConnection(OdbcConnection myCon) { // 接続を閉じる myCon.Close(); // OdbcConnection オブジェクトに使用されているすべてのリソースを解放 myCon.Dispose(); // 処理終了 Console.WriteLine("処理が終了しました"); // 一時停止 Console.Write("Enterキーを押して下さい : "); Console.ReadLine(); } // ****************************************************** // 接続作成 // ****************************************************** static OdbcConnection CreateConnection() { // 新しい OdbcConnectionStringBuilder オブジェクトを作成 OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder(); // ドライバ文字列をセット ( 波型括弧{} は必要ありません ) // 文字列を正確に取得するには、レジストリ : HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI builder.Driver = "MySQL ODBC 5.3 Unicode Driver"; //builder.Driver = "MySQL ODBC 8.0 Unicode Driver"; // 接続用のパラメータを追加 builder.Add("SERVER", "localhost"); builder.Add("DATABASE", "lightbox"); builder.Add("UID", "root"); builder.Add("PWD", ""); // 内容を確認 Console.WriteLine(builder.ConnectionString); // 新しい OdbcConnection オブジェクトを作成 OdbcConnection myCon = new OdbcConnection(); // 接続文字列を設定 myCon.ConnectionString = builder.ConnectionString; // 接続を開く try { myCon.Open(); } catch (OdbcException ex) { Console.WriteLine("接続エラーです"); // Console.WriteLine( ex.Message ) ErrorAction(ex); return null; } return myCon; } // ****************************************************** // エラー処理 // ****************************************************** static void ErrorAction(OdbcException ex) { string CrLf = "\r\n"; string errorMessages = ""; int i = 0; for (i = 0; i <= ex.Errors.Count - 1; i++) { errorMessages += "Index #" + i.ToString() + CrLf + "Message: " + ex.Errors[i].Message + CrLf + "NativeError: " + ex.Errors[i].NativeError.ToString() + CrLf + "Source: " + ex.Errors[i].Source + CrLf + "SQL: " + ex.Errors[i].SQLState + CrLf; } Console.WriteLine(errorMessages); } // ******************************************************** // 列データ取得 // // 列データを文字列として取得しますが、NULL の場合は // 空文字列を返します // ******************************************************** static string GetValue(OdbcDataReader myReader, string strName) { string ret = ""; int fld = 0; // 指定された列名より、テーブル内での定義順序番号を取得 fld = myReader.GetOrdinal(strName); // 定義順序番号より、NULL かどうかをチェック if (myReader.IsDBNull(fld)) { ret = ""; } else { // NULL でなければ内容をオブジェクトとして取りだして文字列化する ret = myReader.GetValue(fld).ToString(); } // 列の値を返す return ret; } } }
以下は、show create table で取得した MySQL用の テーブル作成用 SQL です。
CREATE TABLE `社員マスタ` ( `社員コード` varchar(4) NOT NULL DEFAULT '', `氏名` varchar(50) DEFAULT NULL, `フリガナ` varchar(50) DEFAULT NULL, `所属` varchar(4) DEFAULT NULL, `性別` int(11) DEFAULT NULL, `作成日` datetime DEFAULT NULL, `更新日` datetime DEFAULT NULL, `給与` int(11) DEFAULT NULL, `手当` int(11) DEFAULT NULL, `管理者` varchar(4) DEFAULT NULL, `生年月日` datetime DEFAULT NULL, PRIMARY KEY (`社員コード`) )