*

[C#, AS400]列挙体の文字列化&DB2/400にODBC接続

公開日: : 最終更新日:2014/12/11 AS400, C#, i Series, System i, プログラミング

定数をなるべく書きたくないんです。
あとからメンテをするときに複数箇所変更しなくてはいけないから。

そうするとenumを宣言して、そのenumに文字列返して欲しい、と思います。
というわけでそれを実装。
これを使うとき、よくDBをいじるので、AS400のDBに接続するように使います。

namespace Hoge {
	public enum HogeEnum{
		Library,
		TableName, 
		Col1
	}

	public static class HogeEnumHelper {
		public static string ToStringE(this HogeEnum e) {
			switch (e) {
				case HogeEnum.Library: return "HOGELIB";
				case HogeEnum.HogeTableName: return "HOGETBL";
				case HogeEnum.Col1: return "HOGECOL1";
				default: throw new ArgumentOutOfRangeException("e");
			}
		}
	}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Odbc;

namespace Hoge {
		
	class UseEnum {
		private const string Provider = "{iSeries Access ODBC Driver}";
		private string DataSource = "192.168.0.999"; //接続先IP
		private string UserName = "HOGE";
		private string UserPass = "HOGE";

		public void Test() {
			List<string> test = GetData();
		}

		private List<string> GetData(){
			List<string> resultList = new List<string>();
			using(OdbcConnection con = new OdbcConnection(GetConnectionString())){
				try {
					con.Open();
				} catch (Exception) {
					throw;
				}

				string sql =
					@"	select
							*
							from " + HogeEnum.Library.ToStringE() + "." + HogeEnum.TableName.ToStringE();

				using (OdbcCommand cmd = new OdbcCommand(sql, con)) 
				using (OdbcDataReader reader = cmd.ExecuteReader()){
					while (reader.Read()) {
						resultList.Add((string)reader[HogeEnum.Col1.ToStringE()]);
					}
				}
				con.Close();
			}

			return resultList;
		}

		private string GetConnectionString() {
			string[] strSet = {
								  "Driver=" + Provider + ";",
								  "System=" + DataSource + ";",
								  "Uid=" + UserName + ";",
								  "Pwd=" + UserPass + ";",
							  };
			return string.Join("",strSet);
		}
	}
}

◆解説

public static string ToStringE(this HogeEnum e) {

全てはここに集約されます。
引数でthisを型の前につけると、あたかもインスタンスメソッドのように呼び出すことが出来ます。
ソース中のHogeEnum.Library.ToStringE()などがそうですね。

ad

関連記事

Unity_

[Unity]Unity2Dチュートリアル 番外編 これパズドラじゃなくね?

前回の続き。 パズドラみたく直線で3つ以上連なっているときに消したいんです。 そして、何を勘

記事を読む

VisualStudio_

[C#,Excel]visual studio tools for office(VSTO)を利用してExcelのAddInをC#で作る

いい加減VBAが嫌になってきたので、調べたらC#でExcelのアドインが作れるんですね。 というわ

記事を読む

unity debug

[Unity]MonoDevelopのデバッグの仕方

コメントで頂いた質問を打破するためにデバッグの仕方でも書いてみます。 まずは、プロジェクトを開

記事を読む

logo

[C#,Access]microsoft AccessにODBC接続する

「client AccessのODBC」というタイトルのために、AccessのODBC接続を知りたく

記事を読む

logo

[Unity]GameObject.Findは遅い

遅いらしいです。 なので、マネージャークラスを作りましょう、というのが風潮らしいです。 マネージ

記事を読む

Unity_

[Unity]Unity 2Dチュートリアル スプライトをクリック(タップ)して削除する

前回、スプライトを置くことが出来たのですが、動かせるようにしたいところです。 ドラッグして動

記事を読む

logo

[SQL, DB2]FETCH FIRSTで指定した行数データを取得する(営業日計算)

営業日計算 営業日を計算するのは結構面倒です。 特に独自のテーブルだと非常に厄介です。 例

記事を読む

logo

[C#, Linq]foreach構文は書けるけど、Linqはよくわからなくて勉強する気がなくなった貴方に

Linq普及委員会エントリです。 いまさらすぎるわ! とか言わないで。 小難しい話はなしに、

記事を読む

Excel vsto 印刷設定 print setting

[C#, VSTO]Excelの印刷設定をする

印刷設定 VSTO(Visual Studio Tool for Office)Excelなんぞを

記事を読む

wannabenote

[C#]ポートを使用しているプロセスを特定してAcivateするやつ

ポートからプロセスを特定してAcivateするやつ作りました。 https://github.

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑