ODP.NET(ODAC)を使用してOracleデータベースからデータにアクセスしようとすると例外が発生します。コードは次のようになります:トルコ語でODACを使用してカラム名に 'i'を含むカラムを取得しようとしたときに例外が発生する
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("tr-tr");
string s = "SELECT MyString from MyTable";
var conn = new OracleConnection(connectString);
conn.Open();
var cmd = new OracleCommand(s, conn);
var rdr = cmd.ExecuteReader();
rdr.Read();
object o1 = rdr[0];
object o2 = rdr["MYSTRING"];
object o3 = rdr["MyString"];
o1とo2の割り当てがOKに動作しますが、O3の割り当てが例外を与える:
System.IndexOutOfRangeException: Unable to find specified column in result set
at Oracle.DataAccess.Client.OracleDataReader.GetOrdinal(String name)
at Oracle.DataAccess.Client.OracleDataReader.get_Item(String columnName)
私は "トルコI" の問題を十分に認識です。 ODACのバグのように思えます(不変の文化ではなく、現在のカルチャを使用して列名を大文字に変換しています)が、同様の問題を報告している他の人は見つかりませんでした。
二つの質問:
は、これは本当にODACのバグですか、私は何か間違ったことをやっていますか?
バグの場合は、回避策として、名前付き列を取得するときにすべての列名を大文字に変換することができます(不変のカルチャを使用)。
コードを逆コンパイルしたところで大文字の変換を行っていますが、残念ながら現在のカルチャ設定を使用しています。そのため、サーバーから返された列名はMYSTRINGですが、MyStringを要求すると、実際に存在しないMYSTRİNGという名前の列が見つかります。 – Andy