Чтение атрибутов со специальными именами из 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)....
Другие вопросы по тегам