数据库
首页 > 数据库> > C#-通用数据库连接,命令,读取器的类

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