我的思路是利用System.Data.Common;不直接指定数据提供程序,通过传参的形式创造DbConnection类及DbCommand等等。
代码也很简单,主要抓住这段就差不多了:
Type tempType=Type.GetType("System.Data."+TypeName+",System.Data,version=2.0.0.0,Culture=neutral,PublickeyToken=b77a5c561934e089")
object tempObj=Activator.CreateInstance(tempType);
_connetion=(DbConnection)tempObj;
TypeName就是传入的参数,如OleDb.OleDbConnection等,
_connetion就是一个空的DbConnection,可以在类中把它作为属性输出。
这样只要控制了 TypeName 就能实现数据库在线切换了,我们可以把TypeName和连接字段等烦放入xml或另一个数据库(我选择access)中,这样只要在管理后台实现对这个数据库的操作就可以切换程序的主数据库了。
以上均在vs2005中通过。ms sql server2000 access 2003 oracle 9i 已测试通过
希望能给一些朋友一些启示