如何在MS Access表中读取/获取枚举(作为外键)的字符串表示形式?

问题描述 投票:0回答:2

我正在尝试使用C#中的OleDbConnection类读取MS Access数据库。

到目前为止,我能够连接到数据库并读取特定的表及其每一行。我可以毫无问题地得到基于字符串的字段。但有些列是外键(numeric),我得到数值而不是字符串1(因为它可以在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();
}

实际上,变量名称包含期望值,但status是表示状态的枚举的数值。

如果我们使用MS Access查看数据,我们有例如:

Example MS Access table

状态定义如下:Enum definition

所以实际上我得到了这一行:

  • name = "MyApplication"这是正确的
  • status = 83应该是“增长”

有没有办法获得字符串值?我应该使用其他方式来读取表格(而不是使用DataSet)吗?

c# ms-access oledbconnection
2个回答
1
投票

您可以使用Enum.Parse将字符串值转换为枚举

MyEnum status= (MyEnum) Enum.Parse(typeof(MyEnum), dataRow["APP_STATUS"].ToString());

有关详细信息,请参阅here


0
投票

在.NET Core和.NET> 4中,有一个通用的解析方法:

  Enum.TryParse(dataRow["APP_STATUS"].ToString(), out MyEnum status);

这也将防范dbnull情况。

此外,如果APP_STATUS没有映射到枚举,最好有一个默认的枚举值。

 if (string.IsNullOrWhiteSpace(dataRow["APP_STATUS"].ToString()))
 {
    return MyEnum.None;
 }
 Enum.TryParse(dataRow["APP_STATUS"].ToString(), out MyEnum status);
© www.soinside.com 2019 - 2024. All rights reserved.