在访问本地的Excel和Access文件时,常常碰到版本问题,有些是更早版本的,有些是新版本。
举个例子说就是:对于Excel文件来说,2007版以前都是.xls格式,使用的是Provider=Microsoft.Jet.OleDb.4.0引擎,而2007以后使用的是: Provider=Microsoft.Ace.OleDb.12.0。Access也是一样。
这样在实际中,不知道运行环境有那种引擎,一种是根据扩展名,判断,选择具体的引擎。返回执行消息,这种方法也可以。
但如果,我们事先知道,都有哪些,不是更方便么。
.net framework从2.0开始提供了System.Data.OleDb.OleDbEnumerator 类,以枚举方式列举了可使用的Providers,使用非常方便。
以下是示范代码:
List<string> lst = new List<string>();
OleDbDataReader reader = OleDbEnumerator.GetRootEnumerator();
while (reader.Read())
{
if (!lst.Contains(reader["SOURCES_NAME"].ToString()))
lst.Add(reader["SOURCES_NAME"].ToString());
}
lst.OrderBy(provider => provider).ToArray();
这样就可提取出所有的Providers,当然你需要其他信息的话,还可以获取其他列的值。你可以看OleDbEnumerator在msdn的解释。