#c# #ms-access #oledbconnection
#c# #ms-access #oledbconnection
Вопрос:
Я пытаюсь прочитать базу данных MS Access, используя OleDbConnection
класс в C #.
Пока я могу подключиться к БД и прочитать определенную таблицу и каждую ее строку. Я могу без каких-либо проблем получить поля, основанные на строке. Но некоторые столбцы являются внешними ключами ( numeric
), и я получаю числовое значение вместо строкового (как это видно в MS Access).
Вот краткий пример того, как я продолжаю:
public void ReadDB(OleDbConnection connection)
{
connection.Open();
OleDbDataAdapter dataAdapter = new OleDbDataAdapter("Select * From T_MYTABLE", connection);
DataSet localData = new DataSet();
dataAdapter.Fill(localData);
foreach (DataRow dataRow in localData.Tables[0].Rows)
{
string name = dataRow["APP_NAME"].ToString();
string status = dataRow["APP_STATUS"].ToString();
}
connection.Close();
}
На самом деле имя переменной содержит ожидаемое значение, но статус — это числовое значение перечисления, представляющее статус.
Если мы посмотрим на данные с помощью MS Access, у нас есть, например :
И статус определяется следующим образом: определение перечисления
Итак, на самом деле для этой строки я получаю :
name = "MyApplication"
что правильноstatus = 83
что должно быть «ростом»
Есть ли способ получить строковое значение вместо этого? Должен ли я использовать другой способ чтения таблицы (вместо использования DataSet)?
Ответ №1:
Вы можете преобразовать строковое значение в перечисление, используя Enum.Parse
MyEnum status= (MyEnum) Enum.Parse(typeof(MyEnum), dataRow["APP_STATUS"].ToString());
Смотрите здесь для получения более подробной информации.
Комментарии:
1. Большое вам спасибо за помощь.
2. @Nushi если чей-то ответ решил вашу проблему — примите этот ответ
Ответ №2:
В .NET Core и .NET> 4 существует общий метод синтаксического анализа:
Enum.TryParse(dataRow["APP_STATUS"].ToString(), out MyEnum status);
Это также защитит от ситуации dbnull.
Кроме того, неплохо иметь значение enum по умолчанию, если APP_STATUS не сопоставляется с enum.
if (string.IsNullOrWhiteSpace(dataRow["APP_STATUS"].ToString()))
{
return MyEnum.None;
}
Enum.TryParse(dataRow["APP_STATUS"].ToString(), out MyEnum status);