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



我正在尝试使用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查看数据,我们有例如:

示例MS访问表

状态定义如下:枚举定义

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

  • name = "MyApplication"哪个是正确的
  • status = 83应该是"增长">

有没有办法获取字符串值?我是否应该使用另一种方式来读取表(而不是使用数据集)?

您可以使用enum将字符串值转换为枚举。分析

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

请参阅此处了解更多详细信息。

In。NET核心和。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);

相关内容

  • 没有找到相关文章

最新更新