SQLの窓

2019年05月18日


C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )

スタンダードな 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 (`社員コード`)
)




【VS(C#)の最新記事】
posted by lightbox at 2019-05-18 23:55 | VS(C#) | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり