C#ADO.NET中数据库驱动程序访问的通用方法

我必须编写一个小型C#程序,它将以动态方式处理至少三个不同的数据库供应商(Oracle,Sybase ASE,sqlServer). (它将依靠客户选择来选择数据库)

我决定通过ado.net数据提供商使用“纯”托管驱动程序.

但是,当我尝试连接时,我希望代码是“一行来统治它们”,就像JDBC一样:

DriverManager.getConnection(connection_string);

而不是这个,感到惊讶,我必须为每个驱动程序编写其特定的代码

sqlConnection() for sqlServer 

AseConnection() for Sybase

OracleConnection(),etc.

当然,我应该用自己封装 – 所有这些都在抽象方法和动态加载中,但我想知道为什么在.net中不存在这样的东西

嗯,我感觉我错过了什么

解决方法

由于您在计算机上安装了相应数据库的.Net Provider,因此可以使用 DbProviderFactory作为示例:

包括

using System.Data.Common;

并尝试这样的事情:

// create the provider factory from the namespace provider
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.sqlClient"); 

// you Could create any other provider factory.. for Oracle,MysqL,etc...


// use the factory object to create Data access objects.
DbConnection connection = factory.CreateConnection(); // will return the connection object,in this case,sqlConnection ...

connection.ConnectionString = "read connection string from somewhere.. .config file for sample";


try
{
   // open connection
   connection.open();

   // create command to execute queries...
   DbCommand command = connection.CreateCommand(); // create a sqlCommand,OracleCommand etc... depende of the provider factory configured.

   // some logic 
}
catch 
{
}
finally 
{
   // close connection
   connection.Close();
}

要知道,您的应用程序可以找到哪些提供程序,您可以使用DbProviderFactories.GetFactoryClasses()方法获取DataTable,其中包含计算机上安装的每个提供程序的详细信息.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...