C# 如果OdbcConnection可以在这些地方使用,则需要SqlConnection和OracleConnection
在创建通用C# 如果OdbcConnection可以在这些地方使用,则需要SqlConnection和OracleConnection,c#,oracle,sqlconnection,dbconnection,C#,Oracle,Sqlconnection,Dbconnection,在创建通用DAL以连接到sqlserver和Oracle的过程中。在一些实现之后,如果OdbcConnection可以同时用于连接数据库,为什么需要像SqlConnection和OracleConnection这样的特定实现,我最后感到困惑 建议的实施方式是什么 请告知具体实施的利弊 接口 public interface IDatabaseFactory { DbConnection GetConnection(); DbCommand CreateCommand();
DAL
以连接到sqlserver
和Oracle
的过程中。在一些实现之后,如果OdbcConnection
可以同时用于连接数据库
,为什么需要像SqlConnection
和OracleConnection
这样的特定实现,我最后感到困惑
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();}
}
实施
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();}
}
使用ODBC的优点:
with
子句RETURNING
子句,那么实现中可能会有一些差异(我从来没有在SQL Server中这样做过,所以这只是推测的一部分):PARAM
并在ParameterName
属性中省略冒号,而SQL Server使用@PARAM
并在ParameterName
属性中包含at符号事务时为它添加一个属性
with
子句RETURNING
子句,那么实现中可能会有一些差异(我从来没有在SQL Server中这样做过,所以这只是推测的一部分):PARAM
并在ParameterName
属性中省略冒号,而SQL Server使用@PARAM
并在ParameterName
属性中包含at符号事务时为它添加一个属性
ODBC连接是连接到数据库的非常通用的提供程序。几乎每个数据库都有ODBC驱动程序,即使是简单的CSV文件
作为缺点,ODBC有几个限制(Hambone在他的回答中列出了一些限制),并且在许多情况下,性能比本机驱动程序差,因为ODBC在本机驱动程序之上添加了一个附加层。在您的应用程序中,这种性能下降可能与此无关。ODBC连接是连接到数据库的非常通用的提供程序。几乎每个数据库都有ODBC驱动程序,即使是简单的CSV文件
作为缺点,ODBC有几个限制(Hambone在他的回答中列出了一些限制),并且在许多情况下,性能比本机驱动程序差,因为ODBC在本机驱动程序之上添加了一个附加层。可能在您的应用程序中,这种性能下降并不相关。两种实现都是相同的。猜错了。@nvartak,是的。。。tks…两种实现都是相同的。猜错了。@nvartak,是的。。。tks…ODBC for Oracle要求安装Oracle即时客户端。因此,“在您的.NET解决方案中不依赖于Oracle的第三方驱动程序”是不正确的(至少对于Oracle的ODBC驱动程序而言是如此。对于Microsoft的ODBC驱动程序,我不知道)。依赖项上的有效点,但实际上我指的是.NET应用程序中的依赖项(引用)。在客户方面,我同意。另外,我认为ODBC确实支持命名参数,但我承认我可能弄错了。我很少使用ODBC,因为我列出的许多原因据我所知,ODBC中的参数总是与
?
一起使用,无论您连接到哪个RDBMS(参见示例)。仅对存储过程的调用支持命名参数,但在其他SQL语句中不支持命名参数。ODBC for Oracle要求安装Oracle Instant Client。因此,“您的.NET解决方案中不依赖于Oracle的第三方驱动程序”是不正确的(至少对于Orac的ODBC驱动程序是如此)