我正在尝试使用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查看数据,我们有例如:
状态定义如下:Enum definition
所以实际上我得到了这一行:
name = "MyApplication"
这是正确的status = 83
应该是“增长”有没有办法获得字符串值?我应该使用其他方式来读取表格(而不是使用DataSet)吗?
您可以使用Enum.Parse将字符串值转换为枚举
MyEnum status= (MyEnum) Enum.Parse(typeof(MyEnum), dataRow["APP_STATUS"].ToString());
有关详细信息,请参阅here。
在.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);