如果可以在这些地方使用OdbcConnection,则需要SqlConnection和OracleConnection

时间:2015-11-30 16:08:43

标签: c# oracle sqlconnection dbconnection

在创建共同DAL以连接Sql ServerOracle的过程中。在一些实现之后,如果OdbcConnection可以用于连接到Database,我最后会感到困惑,为什么需要SqlConnectionOracleConnection等特定实现。

  1. 建议的实施方式是什么?
  2. 请告知优点和缺点具体实施
  3. 接口

    public interface IDatabaseFactory  
    {
       DbConnection GetConnection();
    
       DbCommand CreateCommand();
    
       IDbParameter CreateParameter();
    }
    

    实现

    public class SqlFactory : IDatabaseFactory  
    {
       public DbConnection GetConnection(){ return new SqlConnection();}
    
       public DbCommand CreateCommand(){ return new SqlCommand();}
    
       public IDbParameter CreateParameter(){ return new SqlParameter();}
    }
    
    public class SqlFactory : IDatabaseFactory  
    {
       public DbConnection GetConnection(){ return new OracleConnection();}
    
       public DbCommand CreateCommand(){ return new OracleCommand();}
    
       public IDbParameter CreateParameter(){ return new OracleParameter();}
    }
    

2 个答案:

答案 0 :(得分:2)

ODBC连接是一个非常通用的连接到数据库的提供程序。对于几乎每个数据库,您都可以找到ODBC驱动程序,即使对于简单的CSV文件也是如此。

由于缺点ODBC有一些限制(Hambone在他的答案中列出了一些),并且在许多情况下性能比本机驱动程序更差,因为ODBC在本机驱动程序之上添加了一个额外的层。也许在您的应用程序中,这种性能下降是不相关的。

答案 1 :(得分:1)

使用ODBC的优点:

  1. 在.NET解决方案中不依赖于Oracle的第三方驱动程序
  2. 在工厂中编写(和维护)的代码较少,因为它们都使用相同的类(System.Data.Odbc)
  3. 缺点:/ ODBC的考虑因素:

    1. 如果在多台计算机上运行此程序,则必须将ODBC连接设置为相同,而如果使用Managed ODP.net,则可以在代码中显式定义连接属性
    2. 过去,Oracle的某些ODBC驱动程序存在有效Oracle语法问题,例如with子句
    3. 如果您倾向于使用数据库的高级或低级DBMS特定功能"引擎盖下#34;你的工厂,例如OCI的批量插入/更新(令人惊讶),ODBC不会让你访问这些
    4. 可能存在一些与ODBC和某些参数类型混淆的数据类型。我无法想到任何问题,但如果你遇到一些问题我就不会感到震惊
    5. 如果使用RETURNING子句,实现中可能会有一些差异(我在SQL Server中从未这样做过,所以这是部分推测)
    6. 其他考虑因素:

      1. 我很确定即使使用ODBC,您也必须管理不同系统处理参数的方式。例如,Oracle使用:PARAM并省略ParameterName属性中的冒号,而SQL Server使用@PARAM并包含ParameterName属性中的at符号
      2. 我会为你Transaction添加一个属性