【问题标题】:C# Database abstraction for Microsoft SQL Server, Oracle, MySQL and DB2用于 Microsoft SQL Server、Oracle、MySQL 和 DB2 的 C# 数据库抽象
【发布时间】:2009-05-27 15:32:27
【问题描述】:

我需要一个抽象数据库的示例 C# 源代码(只需极少的代码修改即可轻松地从一个数据库更改为另一个数据库)。你知道一些高质量的示例网站或教程吗?

具体目标数据库如下:
1. Microsoft SQL Server
2. 甲骨文
3. MySQL
3. DB2

我的具体要求和遇到的问题如下:
1. 数据访问中使用的类的抽象。
2.调用存储过程时使用参数。在 Microsoft SQL Server @ 中很好。其他数据库不支持@.
3. 将查询语法从一个数据库转换到另一个数据库。我们是否有某种“通用”查询,然后创建一些生成对目标数据库的查询的类?
4. 数据访问层中的严格类型数据集。我从经验中记得 Visual Studio 的 TableAdapter 和 Query 向导在 MySQL 上失败了。

提前感谢您的专业知识和时间。

【问题讨论】:

    标签: c# mysql oracle sql-server-2005


    【解决方案1】:

    看看

    和其他 ORM

    【讨论】:

    • +1 - 像这样的 ORM 可以让您在不付出不成比例的努力的情况下获得尽可能多的成果。对于最后几个尴尬的查询,您可能必须编写一些自定义代码 - merde 发生了。在这些极端情况下,将功能分为依赖于数据库的层和独立于数据库的层。使用标准接口和插入数据库相关模块的机制设置数据库独立层。
    • @Darius Kucinskas:很多人都成功地使用了实体框架。您对 EF 有什么具体问题吗?
    • Entity Framework 的一个大问题是它与特定版本的 Net 框架相关联。假设我开始使用与 Net framework 3.5 sp1 和 Visual Studio 2008 绑定的 EF1,您就无法切换到 EF4,它修复了许多 EF1 的烦恼(其中之一是缺乏 POCO 支持)。您将不得不切换到 Net 4 框架并购买 Visual Studio 2010。但是我必须承认 Linq to Entities 是一个不错的功能。
    【解决方案2】:

    虽然我强烈推荐NHibernate,但您可能还想查看Microsoft's Enterprise Library 的数据访问应用程序块。

    当然,任何 ORM 都应该提供你需要的功能。

    【讨论】:

      【解决方案3】:

      解决此问题的最佳方法是使用数据库提供商提供的接口;它们在功能上几乎是平行的。创建一个静态工厂类,根据配置的数据库为命令适配器、数据适配器和连接创建接口。例如:

          public static IDbDataAdapter GetDataAdapter (Database db)
          {
              switch (db)
              {
                  default:
                  case "MsSql":
                      return new SqlDataAdapter ();
                  case "MySql"
                      return new MySqlDataAdapter ();
              }
          }
      
          public static IDbCommand GetCommand (Database db)
          {
              switch (db)
              {
                  default:
                  case "MsSql":
                      return new SqlCommand ();
                  case "MySql"
                      return new MySqlCommand ();
              }
          }
      

      您的客户端代码不会知道其中的区别,尽管它必须传递配置字符串。使用 VS 文档检查您通常使用的每个对象提供的接口,并坚持使用这些接口,这将非常简单 - 尽管您可能需要通过一些事情来破解。

      【讨论】:

        猜你喜欢
        • 2011-02-16
        • 1970-01-01
        • 2014-11-15
        • 2015-07-17
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 2022-12-20
        相关资源
        最近更新 更多