• Kawahara

i5(AS400)の特殊文字を含むカラム名の取扱い

i5(AS400)に対してODBC経由でSELECTはもちろん、INSERT,UPDATEなどのクエリも問題なく処理できるのですがプログラムのインストールとは別にIBM iSeries Access for WindowsをインストールしODBCの接続設定をしないと動作しません。しかもODBCの接続設定名も間違っていてはいけません。

そのためiSeries Access for Windowsに含まれるIBM.Data.DB2.iSeries(.Netプログラミングサポート時にインストールされる)を利用してクエリを実行するにはどうすればよいか悩んでました。

というのも、@@TESTというカラムが存在していた場合にODBCなら[@@TEST]と記述すれば問題なかったが、iSeries Access for Windowsで同じように記述するとエラーとなる。

結局、"(ダブルクォテーション)を使えばうまく行くことがわかった。実際には"@@TEST"となる。"(ダブルクォテーション)はC#上でも特殊文字なので記述が面倒だけど。


public void UpdateTest(string sValue)
{
    const string CRLF = @"rn";
    StringBuilder sbSql = new StringBuilder();

    sbSql.Append("UPDATE" + CRLF);
    sbSql.Append("    TESTLIB.TEST0407" + CRLF);
    sbSql.Append("SET" + CRLF);
    sbSql.Append("    "@@TEST2" = @TEST2" + CRLF);
    sbSql.Append("WHERE" + CRLF);
    sbSql.Append("    "@@TEST1"= @TEST1" + CRLF);

    try
    {
        using (iDB2Connection cn = new iDB2Connection(DataSource=192.168.xxx.xxx;USERID=(ユーザー名);PASSWORD=(パスワード);))
        {
            cn.Open();
            using (iDB2Command cmd = cn.CreateCommand())
            {
                sbSql = sbSql.Replace(CRLF, " ");
                cmd.CommandText = sbSql.ToString();
                
                Debug.WriteLine(sbSql.ToString());

                cmd.Parameters.Add("@TEST1", iDB2DbType.iDB2Char);
                cmd.Parameters.Add("@TEST2", iDB2DbType.iDB2Char);

                cmd.Parameters["@TEST1"].Value = "(更新対象レコードのキー)";
                cmd.Parameters["@TEST2"].Value = sValue;

                cmd.ExecuteNonQuery();
            }
            cn.Close();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

※AppendLineを使用していないのは、WindowsCEとソースを共有している為です。あとは実際には円マークです。

#AS400 #C #i5 #ODBC

9回の閲覧

最新記事

すべて表示

Visual WebGui販売終了

GrapeCityが販売していたVisual WebGuiが2014年10月22日で販売終了との事。価格は高いが、便利なんだろうなと気になっていた製品だった。 2013年の6月から1年半弱で販売終了となったのに気付いた時は、「買わなくてよかった」と「こんなことあるの?」という感想。 http://www.grapecity.com/tools/support/salesend.htm#end201

C#でのクラスライブラリの設計

C#でクラスライブラリを使用すると複数のプロジェクトで使用できて便利。しかし、どんな単位でクラスライブラリを分割するか悩みながらも下記のように考えていました。 外部コンポーネントの有無 DBの接続先 ODBCの設定要否 .NetframeWorkのバージョン しかしこの方法だと ライブラリ数が増えてしまい、管理が大変 他のライブラリとの依存関係が複雑になる そこで.NetframeWorkのバージ

© 2019 BY マルハチITサービス PROUDLY CREATED WITH Wix.com​