*

[C#]AS400に対してODBC接続でトランザクションによりSQLを実行する。

公開日: : AS400, C#, i Series, System i

データベースに対するトランザクション処理

と銘打ちましたが、要するに安全にinsert文などを実行するための処理です。

いつもTransactionの書き方を忘れて調べてるのでその備忘録。

ソース

using System.Data.Odbc;

public class Hoge{
	private const string Provider = "{iSeries Access ODBC Driver}";
	private const string Datasource = "192.168.0.2";
	private const string Username = "HOGE";
	private const string Password = "HOGE";

	public void Update(string[] sqls){
		using (var con = new OdbcConnection(GetConnectionString())) {
			con.Open();
			var transaction = con.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
			try {
				foreach (var sql in sqls) {
					using (var cmd = new OdbcCommand(sql, con, transaction)) {
						cmd.ExecuteNonQuery();
					}
				}
				transaction.Commit();
			} catch (OdbcException) {
				transaction.Rollback();
				throw;
			} finally {
				con.Close();
			}
		}
	}

	public static string GetConnectionString() {
	string[] conStrs = {
						   "Driver=" + Provider + ";", 
						   "System=" + Datasource + ";",
						   "Uid=" + Username + ";",
						   "Pwd=" + Password + ";",
					   };

		return string.Join("", conStrs);
	}
}

解説

Updateというメソッドに引数で実行したいSQL文字列の配列を渡して実行させます。
なお、SQLを投げる相手が上記のようにAS400(iSeries, System i, DB2)の場合はジャーナル処理をしているテーブルでないとSQL7008というエラーが出ますので注意です。
IsolationLevelは大抵の場合はReadCommitedで問題ないと思います。
並列処理などを行う際にのみ、ファントムリード(処理中のデータを読み取り、取得したデータが実際の値と違うものとなる)が出来てしまうのでお気をつけください。

ad

関連記事

logo

[C#]BinaryFormatterなどSerializerいろいろ書いておく

github始めました -> わなびのgithub それは置いておいて、BinaryForma

記事を読む

unity socket

[Unity]Socket通信でP2Pすっぞ 接続待ち受け

P2Pしましょ。 まずはサーバーとして待ちうけまで作ります。 UnityだとNAT越えどうす

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 画面上のGameObjectを取得する

前回の続きです。 というわけで移動の仕方は完璧です。本当なら一瞬で移動ではなく、パズドラみたく

記事を読む

Excel Csharp

[C#]DataGridViewにプロパティを利用しながら配列をバインドする。

DataGridView C#のFormにデータを表示するのに便利なコントロールがあります。 デ

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 同じ色のパズルを消去する

前回の続き。 さて、そろそろパズドラみたいにパズルを消すロジックを考えていきましょう。 パズ

記事を読む

Unity_

[Unity]Unity 2Dチュートリアル スプライトを元の位置に戻す

前回ドラッグして移動するところまでは作成したのですが、パズドラって、タップしてもその場から動かさなか

記事を読む

unity toggle button label

[Unity]コードリファレンス テキストを表示する。

テキストを表示します。 OnGUI() Unityでテキストを表示する場合は、OnGUI()

記事を読む

logo

プログラミング言語の選択

最初のプログラミング言語っていうのは思い入れが深いもんです。 私はこんな感じ。 C言語 ↓ jav

記事を読む

logo

[Unity]コードリファレンス ソケット通信の開始して接続して切断する。

オンラインゲームを作るためにはソケット通信が必要です。 今回はいきなりソースから。解説は下の方に。

記事を読む

logo

[java, jt400]AS400ネイティブ環境でjavaを起動し、ファイルに対するSQLを実行する方法。

日本語資料なさすぎだから自分で作ります。 AS400がでjavaを起動して、自分のファイルを見に行

記事を読む

ad

Comment

  1. Johne984 より:

    Hello to all, the contents existing at this site are in fact remarkable for people knowledge, well, keep up the nice work fellows. fedcegeabdeb

Johne984 にコメントする コメントをキャンセル

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

次の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 ↑