C#-通用数据库连接,命令,读取器的类
作者:互联网
假设我正在设计一个可以处理任何数据库技术的类,以创建连接,执行命令和检索数据等.
如果我需要为现有RDBMS(如SQL Server,Oracle,FireBird等)创建通用数据库处理类,则应使用{DbConnection,DbCommand,DbParameter,…}或{ IDbConnection,IDbCommand,IDbParameter,…}?
我应该使用类似的代码吗
public bool CreateConnection(DatabaseTypeEnum type)
{
DbConnection conn ;
if(type==DatabaseTye.Oracle)
{
//....
}
}
public DbDataReader GetData()
{
DbCommand comm;
//...
}
要么,
public bool CreateConnection(DatabaseTypeEnum type)
{
IDbConnection conn ;
if(type==DatabaseTye.Oracle)
{
//....
}
}
public IDbDataReader GetData()
{
IDbCommand comm;
//...
}
而且,为什么呢?
解决方法:
嗯…完全不同的问题:)
好都不行
当您这样做时,您将违反开放关闭原则.在该特定位置的switch / if语句使我不舒服:).
我会将实际的创建工作留给Factory类,并且您的代码是否在与SQL Server或DB2或Oracle或其他对象通信,都不在乎.
理想情况下,您的代码应仅与IDbConnection,IDbCommand等或抽象基类(DbConnection,DbCommand等)对话.有时我确实发现您需要上载到特定的提供程序tho(例如使用特定方法的SqlDataReader),但这很少见.
工厂会将这个switch / if语句封装到一个地方,以便于维护.您可以在app.config中进一步抽象实际的创建.因此,在app.config中,您可以选择要支持的数据库后端类型,工厂将在此处进行选择并为您创建必要的数据库内容.
请参阅:this.阅读有关创建DbProviderFactory和连接部分的信息.
标签:ado-net,c 来源: https://codeday.me/bug/20191024/1920713.html