Ich erhalte eine Ausnahme, wenn ich versuche, mit ODP.NET (ODAC) auf Daten aus einer Oracle-Datenbank zuzugreifen. Der Code lautet wie folgt:Ausnahme beim Versuch, die Spalte mit 'i' im Spaltennamen mithilfe von ODAC in Türkisch abzurufen
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"];
die o1 und o2 Zuweisungen arbeiten OK, aber die o3 Zuordnung gibt eine Ausnahme:
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)
Ich bin voll und ganz bewusst von der "türkisch I" Problem. Es sieht für mich wie ein Fehler in ODAC aus (es konvertiert den Spaltennamen unter Verwendung der aktuellen Kultur und nicht der invarianten Kultur in Großbuchstaben), aber ich habe niemanden gefunden, der ähnliche Probleme meldet.
zwei Fragen:
ist dies wirklich ein Fehler in ODAC oder bin ich etwas falsch?
Wenn es sich um einen Fehler handelt, kann ich zur Umgehung aller benannten Spalten einfach alle Spaltennamen in Großbuchstaben umwandeln (mit invarianter Kultur).
Ich habe jetzt den Code dekompiliert und ich kann sehen, wo es die Konvertierung in Großbuchstaben macht und leider die aktuellen Kultureinstellungen verwendet, Während also der vom Server zurückgegebene Spaltenname MYSTRING ist, sucht er nach einer Spalte namens MYSTRİNG (mit einem gestrichelten Großbuchstaben I), die nicht existiert. – Andy