我正在尝试使用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);