嘗試使用ODP.NET(ODAC)從Oracle數據庫訪問數據時遇到異常。該代碼是這樣的:嘗試使用ODAC在土耳其語中的列名中檢索列的例外
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的分配工作確定,但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)
我充分認識到「土耳其我」的問題。它看起來像我在ODAC中的一個錯誤(它使用當前的文化而不是不變的文化將列名轉換爲大寫),但我還沒有發現其他人報告過類似的問題。
兩個問題:
這真的是在ODAC的錯誤還是我做錯了什麼?
如果它是一個錯誤,作爲解決方法,我可以簡單地在檢索命名列時將所有列名轉換爲大寫(使用不變文化)?
我已經反編譯了代碼,我可以看到它在做大寫轉換,不幸的是它使用當前的區域設置,所以從服務器返回的列名是MYSTRING,如果我要求MyString,它實際上是在尋找一個名爲MYSTRİNG的列(大寫字母爲I),它不存在。 – Andy