我正在开发一个带有数据库工厂模式的asp.net应用程序,它允许应用程序同时支持Sql Server和Oracle。我创建了一个抽象类,它具有Sql Server和Oracle共有的方法,比如CreateConnection和CreateCommand方法。该类由SqlServer和Oracle类实现。现在,是否有一种简单的方法来编写带有Sql Server和Oracle通用参数的内联sql查询。我的意思是,我知道我们在Sql Server中使用“@”符号,在Oracle中使用“:”作为参数。正因为这个原因,我在每个班级写两次查询。有没有办法编写这两个数据库共有的查询? (或解释一个常见查询中的参数?)
感谢。
答案 0 :(得分:1)
编写一个适用于Oracle和Sql Server的查询的唯一方法是仅使用两个平台共有的语法。一旦您使用两种语言之间不同的功能(如参数或连接),您必须编写两个不同的查询或将一个“翻译器”类混合在一起,将一个查询从一个平台转换为另一个平台。
我已经做了很多这种类型的编程(与数据库无关的软件),并且使用.Net这样做的一种相对无痛的方法是将主应用程序编写为完全使用ADO.Net DataTables / DataSet ,使用一个包装类来处理从底层的Oracle或Sql Server表生成DataTables,并处理对DataTables进行的持久更改,返回Oracle或Sql Server。这种方法可以在一个地方隔离特定于数据库的代码,但如果应用程序需要访问的数据很大,则不一定是可行的方法。
答案 1 :(得分:1)
您可以编写某种翻译器,但我建议在某些情况下,出于性能原因需要编写特定于db的代码,因此您将不得不忍受两个版本的维护负担。一些疑问。
答案 2 :(得分:1)
使用ORACLE并且不使用所有非标准功能(分析,枢轴等)有什么意义? ORACLE是一个强大的工具。 其他数据库也有自己的实力,那么为什么要使用最低的公分母才能使用它们呢?你只会失去表现。
只需选择一个数据库,并完全使用它的所有功能!
答案 3 :(得分:0)
请原谅我的无知,但不能像ORM(对象关系映射器)那样适用于SQL和Oracle吗?
答案 4 :(得分:0)
我有类似的要求,支持Sql Server和Oracle,并总结了我在这些文章中遇到这些问题的两年经验:
Writing ANSI Standard SQL is not practical.
Think ANSI Standard SQL Is Fully Portable Between Databases? Think Again.