【问题标题】:Queries for Sql Server and OracleSql Server 和 Oracle 的查询
【发布时间】:2009-07-10 23:24:53
【问题描述】:

我正在开发一个带有数据库工厂模式的 asp.net 应用程序,它允许应用程序同时支持 Sql Server 和 Oracle。我创建了一个抽象类,它具有 Sql Server 和 Oracle 共有的方法,例如 CreateConnection 和 CreateCommand 方法。该类由 SqlServer 和 Oracle 类实现。现在,有没有一种简单的方法可以使用 Sql Server 和 Oracle 共有的参数编写内联 sql 查询。我的意思是,我知道我们在 Sql Server 中使用“@”符号,在 Oracle 中使用“:”作为参数。正是出于这个原因,我在每个班级都写了两次查询。有没有办法编写两个数据库共有的此类查询? (或者解释一个常见查询的参数?)

谢谢。

【问题讨论】:

    标签: sql-server oracle


    【解决方案1】:

    编写一个适用于 Oracle 和 Sql Server 的查询的唯一方法是仅使用两个平台通用的语法。一旦您使用两种语言之间不同的功能(如参数或连接),您要么必须编写两个不同的查询,要么将一个“翻译器”类组合在一起,将查询从一个平台转换到另一个平台。

    我已经完成了很多此类编程(与数据库无关的软件),而使用 .Net 的一种相对轻松的方法是编写您的主应用程序以完全使用 ADO.Net DataTables/DataSets , 带有一个包装类,该类处理在后台从 Oracle 或 Sql Server 表生成 DataTables,并且还将对 DataTables 所做的更改持久处理回 Oracle 或 Sql Server。这种方法将您的特定于数据库的代码隔离在一个地方,但如果您的应用程序需要访问的数据很大,这不一定是一种可行的方法。

    【讨论】:

      【解决方案2】:

      您可以编写某种翻译器,但我建议在某些情况下,出于性能原因,您需要编写特定于 db 的代码,因此您必须忍受两个版本的维护负担一些查询。

      【讨论】:

        【解决方案3】:

        使用 ORACLE 而不是使用其所有非标准功能(分析、数据透视等)有什么意义? ORACLE 是一个强大的工具。 其他数据库也有自己的优势,那么为什么要使用最低公分母来处理所有数据库呢?你只会失去性能。

        只需选择一个数据库,并充分利用它的所有功能!

        【讨论】:

          【解决方案4】:

          请原谅我的无知,但是像 ORM(对象关系映射器)这样的东西不能同时适用于 SQL 和 Oracle 吗?

          【讨论】:

            【解决方案5】:

            我有类似的需求,要同时支持Sql Server和Oracle,在这些文章中总结了我两年处理此类问题的经验:

            Writing ANSI Standard SQL is not practical.

            Think ANSI Standard SQL Is Fully Portable Between Databases? Think Again.

            【讨论】:

              猜你喜欢
              • 2011-09-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-29
              • 1970-01-01
              • 2014-03-31
              • 2014-05-30
              • 1970-01-01
              相关资源
              最近更新 更多