而不要数据库不同有不同的中间层。

解决方案 »

  1.   

    试试用ODBC.
    在应用程序服务器中连接ODBC,
    ODBC连接什么数据源就可以自己配置了,不用修改程序.
      

  2.   

    还必须只用标准的sql,不用任何特殊的语句函数啥的,
    或者你把对数据库的操作全弄成存储过程,所有数据库的都一致
      

  3.   

    楼上说的就不对了,过多用存储过程才是换数据库的最大忌,最简单的例子,ORACLE不能象SQL SERVER那样直接在存储过程SELECT东西出来。如果你真的要求SQL必须一动不动就能支持不同数据库,那就自己抽象中间语言吧,象HQL之类。否则的话,你一个接口对应不同实现就好了,里面大部份语句应该还是可以小修小改继续用的。另外你要分清楚我说的意思,我是说“封装访问控件”的接口,也就是一套接口(IDataSet、IQuery、IConnection之类),可以有访问ORACLE的控件的实现(如DOA),可以有访问SQL SERVER的实现(如ADO)。至于你在IQuery里面写什么语句就看你自己了。
      

  4.   

    你的意思我想我没有理解错,你说的是数据访问层封装数据库访问控件的接口,我说的是业务层吧?
    存储过程的使用见仁见智,根据需要选用就好了,ORACLE不能select,但是用游标也是可以代替的吧。
      

  5.   

    个人觉得这个可以做个大致的参考:http://topic.csdn.net/u/20090423/01/f09753e0-8182-494f-ab10-824a40484dee.html
      

  6.   

    众所周知的,Oracle和SQLServer支持的SQL语句语法是不一样的,即使是把这两个组合放在一个中间层,也难免要针对不同的数据库写不同的SQL语句,而且最好不要用存储过程。
      

  7.   

    用DBX控件,还有,SQL要尽量通用.
      

  8.   

    SQL Parser + SQL Constructor
      

  9.   

    SQL Parser + SQL Constructor是什么?
      

  10.   

    解析拆分+重新构造
    select基本构造无非是:
    select fieldname from tablename where condition order by fieldname + partal-request相对不同的,比如partal-request,就只是写法上的不同,比如mssql是top N,mysql是Limit N等等。在BDE的代码当中就有类似的parser处理代码,可以用来做参考。
      

  11.   

    这个问题好象不用讨论了,想想为什么会有HiberNite,LinQ就明白了。
      

  12.   

    谁有 dbx的详细的使用说明,或者是经验介绍?
      

  13.   

    主要是存储过程调用、DECLARE语句等差异比较多,其他倒还好处理
      

  14.   

    个人觉得使用存储过程比通用语句会有相当多的优点。
    如果你对数据库比较了解的话,你会发现,数据库的操作很多时候性能调优是一件非常复杂的事情。
    因此在大型的数据库应用系统当中为了性能等各方面的考虑会配备相应的DBA,而DBA进行调优自然会用于专属的语法和处理机制,这个在不同的数据库之间是有相关差异性的。如果一套系统(除非某些确实不必要的)所有作业都通过存储过程来处理,那么就可以把让DBA为整个系统的调优做出相应的工作。另外,对于程序员来讲,要熟悉每一种数据库也是相当困难的,所以在某些大型项目当中数据库开发会把数据库开发和业务程序开发分离,之间采用调用接口约定来完成,此时可能存储过程会是一种比较可取的办法,否则熟悉Oracle数据库的开发人员,你希望他写出适用于MSSQL数据库的语句给你,那几乎是不太可能的,但是却可以通过约定存储过程的接口来达到这一目录,从而使得逻辑上分层更为清楚。存储过程除了可以由DBA进行前期和后期的优化以外,还可以通过存储过程的编译系统达到一定的性能提升,这比在程序当中写大批语句性能上还是会有一定的影响的。某些简单业务的变更也可以交给数据库开发人员,或者DBA处理。另外就是升级,一个数据库从低版本到高版本的升迁,在某些时候可能版本的升级会带来一定的性能提升,但是前提是需要做某些语法等上面的提升来获得,而此时对于存储过程的重新编译或者调整的优越也会体现出来。