如果我有连接对象,我可以检索提供程序吗?

时间:2009-09-08 22:08:13

标签: c# vb.net ado.net

给定一个连接对象(或一系列连接对象),是否有人知道回溯并获取提供者名称的方法?

我正在尝试创建一个通用数据集生成器,有人可以加载 n DbCommand实例填充数据集而无需任何进一步的信息。

理论上,由于命令需要连接对象,因此创建此工具所需的所有信息都是。

鉴于我正在填充数据集中的表,我认为最简单的方法是使用DataAdapter。唯一的问题是,要生成一个通用的DataAdapter,我似乎必须通过提供程序工厂,这需要一个提供程序字符串 - 我没有。

另外,鉴于每个命令的提供程序可能有所不同(即跨多个数据库的命令),是否有人有任何建议可以保持这一点?

如果可以避免,我不想要求用户为每个命令对象提供提供程序字符串。这样用户就可以传递一个DbCommands的参数数组,我可以从那里获取它。

任何建议都非常有用。感谢。

1 个答案:

答案 0 :(得分:1)

DbConnection.DbProviderFactory属性正是​​这样做的;唯一的问题是它是protected。请注意,这仍然意味着它是已发布的API,因此使用Reflection访问它不应该容易出现版本破坏,尽管它需要适当的权限才能绕过可见性检查。