I'm hitting an exception when trying to access data from an Oracle database using ODP.NET (ODAC). The code goes like this:
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"];
the o1 and o2 assignments work OK, but the o3 assignment gives an exception:
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'm fully aware of the "turkish I" problem. It looks to me like a bug in ODAC (it's converting the column name to upper case using the current culture rather than the invariant culture) but I haven't found anyone else reporting similar problems.
two questions:
is this really a bug in ODAC or am I doing something wrong?
If it is a bug, as a workaround can I simply convert all column names to upper case (using invariant culture) when retrieving named columns?