我什么时候应该使用Odbc,OleDb,SQLClient?有什么权衡取舍

时间:2009-06-01 22:16:16

标签: .net database odbc oledb sqlclient

我开始使用SQLServer数据库。所以我似乎应该使用System.Data.SqlClient命名空间。但是,我们有可能关闭我们的SqlServer数据库并转到MySql或Oracle。出于这个原因,我提出了一套关于我们的.Net应用程序如何与数据库通信的标准,以便在将来如果我们需要的话,可以更容易地迁移到不同的数据库系统。

以下是标准:

  1. 如果可能,请使用ORM(例如 NHibernate)(没有LINQ,因为它只 支持SqlServer,但是怎么样 实体框架及其支持 Oracle和MySql?)
  2. 如果ORM是过度杀死,则使用参数化SQL查询。
  3. 仅将存储过程用于长时间运行或复杂的操作 需要在上面进行 数据库中。
  4. 这让我想到了我手边的主要问题。 我应该使用哪个命名空间来编写DAL代码?

    我认为选择在System.Data.ODBCSystem.Data.OleDB之间:

    • 有什么权衡取舍?
    • 是一个优先于另一个吗?
    • 您对前3个标准有何看法?

7 个答案:

答案 0 :(得分:2)

您想使用SQL Server驱动程序。我理解你要做的是什么,但你完成支持多个数据库的方式是插入另一层抽象。你可以做很多事。但是,您将特定于数据库的代码放在类层次结构的边缘。因此,每个类都可以获得数据库特定功能的好处,但是更高级别的调用者不知道或不关心下面使用的数据库。对于ORM,我更喜欢LLBLGen,但这只是我的偏好。

另外,为了澄清,LINQ并不是特定于SQL Server。这是LINQ-to-SQL。 LINQ是一种查询技术,可用于LINQ-to-SQL,LINQ-to-Entities,LINQ-to-objects,甚至LLBLGen支持LINQ。

答案 1 :(得分:2)

无论您现在是否使用SQLClient或Odbc,如果使用存储过程或其他特定于数据库的功能,如果更改数据库引擎,则必须重写这些功能。

答案 2 :(得分:1)

我只是使用SqlClient并重新编写/重新生成DAL,如果它发生了变化。

除非你现在要在多个平台上实施和测试,否则我不确定现在额外的努力是重要的还是重做DAL的努力,以及你的事实得到一个DAL,无论如何你已经将所有东西放在一个地方以备后来改变。

答案 3 :(得分:1)

如果你有任何想法,你将交换数据库(或支持多个后端),那么ORM就是你要走的路。否则,您仍然需要重构/重写大量的DAL才能支持更改。如果你的应用程序很小,它不会坏,但任何实质性的东西,你都会受到伤害。

答案 4 :(得分:1)

你会发现使用SQL Server SqlClient比OleDB和ODBC更快更容易开发 - 除非你极有可能需要支持多个平台,你会发现它们的好处大于你将要承担的风险需要重写你的DAL。

此外,使用OleDB / ODBC只是保持平台独立性的一种方法 - 您可能会发现使用DAL的多个实现更有效,每个实现使用所使用平台的本机客户端。

答案 5 :(得分:1)

System.Data.SqlClient的

仅连接到SQL Server 2000及更高版本,但在连接到这些数据库时,您将获得最佳性能。

System.Data.OledbClient

连接到SQL 6.5

OLEDBClient使您能够连接到其他数据库,如ORACLE或Access。但是对于使用SQL Server,您将使用SQLClient获得更好的性能。

注意:为了连接到ORACLE,Microsoft也有ORACLEClient。

System.Data.ODBCClient

仅使用ODBC驱动程序连接到旧数据库。 (例如MS Access 97。)

Original source

答案 6 :(得分:0)

我听说过,除非它是一个关键功能,否则你不应该过分担心维护平台的独立性。那就是说,

SQLClient将为您提供本机访问权限,并且应该更高效(它不需要进行任何抽象/翻译)。

为了让OLEDB与ODBC相比,你唯一需要改变的就是你的连接字符串。 OLEDB具有更多的客户端智能,因此它提供了更好的性能。