Чтение атрибутов со специальными именами из MS ACCESS в OleDbDataReader
У меня есть проблемы с чтением из базы данных accdb, когда в ней есть имена полей с такими символами, как "-", "%", "/" или если имя поля "Уровень". Когда у меня есть что-то вроде этого:
string mySelectQuery = "SELECT 'Part_Time_%','Level',Level_change_reason FROM Employees";
OleDbConnection myConnection = new OleDbConnection(oledbConnectString);
OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);
myConnection.Open();
OleDbDataReader myReader = myCommand.ExecuteReader();
это работает хорошо, потому что символы '' отменяют специальные символы и слово meining. Хорошо:
if ((myReader["Name"] == DBNull.Value) ....
if ((myReader["Surname"] == DBNull.Value) ....
Но когда я попробую это:
if ((myReader["Macro-activity"] == DBNull.Value) ...
if ((myReader["Level"] == DBNull.Value)....
он прыгает, чтобы поймать заявление. Я тоже пробовал myReader["\u004cevel"], myReader["'Macro-activity'"]
- он полностью игнорирует escape-символы.
Каждый ответ будет очень признателен.
PS: не могу изменить название атрибутов.
2 ответа
Экранирование имен столбцов в Access использует фигурные скобки, [ & ]
, не одиночные кавычки.
string mySelectQuery = "SELECT '[Part_Time_%],[Level],Level_change_reason FROM Employees";
Одиночные кавычки предназначены для строки, поэтому наличие "Уровня" в операторе выбора вернет текст "Уровень" в виде безымянного столбца в наборе результатов. Если вы попытаетесь myReader.GetItem(1)
это вернется "Level"
для каждого ряда.
Я нашел это, и он делает то, что я хочу:
if ((myReader.GetValue(18) == DBNull.Value) || string.Compare(myReader.GetValue(18).ToString(), "0") == 0)....