代码之家  ›  专栏  ›  技术社区  ›  Raj Rao

我应该什么时候使用Odbc、OleDb、SQLClient?取舍是什么

  •  7
  • Raj Rao  · 技术社区  · 16 年前

    我从SQLServer数据库开始。看来我应该用 System.Data.SqlClient

    以下是标准:

    1. 如果可能,使用ORM(例如 NHibernate)(没有LINQ,因为它只是 支持SqlServer,但是关于它呢 实体框架及其支持 Oracle和MySql?)
    2. 仅将存储过程用于长时间运行或复杂的操作 数据库

    这让我想到了我的 我应该使用哪个名称空间来编写DAL?

    System.Data.ODBC System.Data.OleDB

    • 取舍是什么?
    • 一个比另一个好吗?
    • 您对前3个标准有何看法?
    7 回复  |  直到 10 年前
        1
  •  3
  •   Joseph Dykstra J. K.    9 年前

    System.Data.SQLClient

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

    System.Data.OledbClient

    连接到SQL 6.5

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

    System.Data.ODBCClient

    Original source

        2
  •  2
  •   BobbyShaftoe    16 年前

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

    另外,为了澄清,LINQ并不是特定于SQL Server的。这就是LINQ到SQL。LINQ是一种查询技术,可以在LINQtoSQL、LINQtoEntities、LINQtoObject中使用,甚至LLBLGen都支持LINQ。

        3
  •  2
  •   Rob Bratton    14 年前

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

        4
  •  1
  •   Cade Roux    16 年前

    如果DAL发生变化,我只需要使用SqlClient并重新写入/重新生成DAL。

    除非您现在要在多个平台上实现和测试,否则我不确定现在的额外工作是否是一件大事,或者是否比重做DAL的工作要少。事实上,您已经有了一个DAL,这意味着您已经将所有东西都放在一个地方,以便以后进行更改。

        5
  •  1
  •   Nick DeVore    16 年前

    如果您有任何迹象表明您将交换数据库(或支持多个后端),那么ORM就是一个不错的选择。否则,您仍然需要重构/重写大量DAL以支持更改。如果你的应用程序很小,它不会很坏,但是任何实质性的东西都会伤害你。

        6
  •  1
  •   Justin    16 年前

    您会发现,使用SQL Server开发SqlClient比使用OleDB和ODBC要快得多,也更容易——除非您极有可能需要支持多种平台,否则您会发现重写DAL的好处大于风险。

    此外,使用OleDB/ODBC仅仅是维护平台独立性的一种方法——您可能会发现多个DAL实现更有效,每个实现都使用所使用平台的本地客户端。

        7
  •  0
  •   steamer25    16 年前

    我听说过,除非它是一个关键特性,否则您不应该太担心维护平台独立性。也就是说,

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

    与ODBC相比,要使OLEDB正常工作,唯一需要更改的是连接字符串。OLEDB有更多的客户端智能,因此它提供了更好的性能。

    推荐文章