i5(AS400)とODBCで接続した場合に列名に円マークを含むテーブルを参照できない現象が以前から確認していましたが、あるとき全く気にしないで処理していることに気付きました。
確認したところ、原因はIBM System i Access for Windowsのバージョンでした。V5R4(詳細バージョン確認忘れ)ではだめでしたが、V6R1では問題ないです。
うまくODBCで参照できない時は、列名に円マークを使っていないか確認してみるといいかも知れません。
よく対処方法を忘れているのでメモ。「iDB2Connection SQL0666」で検索して辿りつくのはいつもここ。ありがとうございます。
接続文字列にタイムアウトを0(無制限)としても自動で30に変更されていまうから、コードで再設定する事で解決します。
ちなみにODBCの場合はAS400のデフォルトの設定値によって同様のエラーが発生する時パターンあり。
public void TestFunction() { try { using (iDB2Connection cn = new iDB2Connection("DataSource=AS400;USERID=FOO;PASSWORD=BAR;CONNECTION TIMEOUT=0;")) { cn.Open(); using (iDB2Command cmd = cn.CreateCommand()) { cmd.CommandText = "SELECT * FROM HURGETBL"; cmd.CommandTimeout = 0; // ←ここが無いと接続文字列でTimeout=0と定義しても30で上書きされてエラーになる。 iDB2DataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { dr.Read(); } } cn.Close(); } } catch (Exception ex) { throw ex; } }
すっかりCEの開発をしていなかったら、SQL Serverに繋ぐ為に.Net Compact Framework以外にSqlClientをインストールしないと行けない事を忘れていた。
VS2005に付属のラインタイムは↓
C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Client\v2.0\
SQL Serverで改行を取り除く時はこんな感じ。
SELECT REPLACE(Memo,CHAR(10),' | ') FROM TEST