最近有个项目,我们被要求把本来写在前台的SQL查询语句,一律以存储过程写在后台,返回数据集后在在前台显示出来,我始终想不通这样做有什么好处,请高手们指点。
    我以BDE为例来说:
 平时写:
    设置好DataBase的Connected
    设置好Query的DataBaseName和SQL并且
    Query.Open;
    然后加入Datasource和感知DataGrid
 现在写:
    把查询以存储过程的形式写在后台,然后再返回数据集供前台显示
我不习惯这样的写法.谁能告诉我这样写到底有什么好处
    啊啊啊啊!     

解决方案 »

  1.   

    查询用存储过程优势不明显, 但是update和insert就很明显了。
    1.定制方便
    2. 企业逻辑集中
    3. 客户端维护升级甚至重写都方便
    4. 速度又快
    5. 界面特别错误提示有利
    6. ....
      

  2.   

    嗯嗯,刚刚起床,就看到你们的回复,谢谢
    的却把DML的(Insert update Delete)写在后台有这么多优势
    但问题是把Select 也写在后台,然后通过数据集返回,这样优势又有何在?
    而且返回数据集在MSSQL中是易如反掌,但是在Oracle好像就不那么简单了
    我听说用包来来返回的是游标,但是游标如果不关闭,好像中是要
    占用服务器的资源的,是不是这样?
      

  3.   

    存储过程在容错机制和负载平衡上比客户端实现好很多,具体的技术内幕就不得而知了而且用存储过程可以实现游标,参数传递,调用触发器等等好多优点,用了就会爱上Storeprocedure的
      

  4.   

    在Oracle 数据库中返回结果集需要用到游标
    而众所周知游标这东西打开后使用完了要关掉的,
    那样会不会对前台代码有影响。
      

  5.   

    刚刚做了个实验,我说一下我的一些认识吧,可能是错误的。
    我用的是Oracle9i
    用ref cursor 返回查询的数据集给Query,再用DataSource显示出来
    很明显,Oracle的游标打开后是存在于服务器上的,那样连接用户多了
    应该不是很理想,要把Oracle 的 open_cursors改成多大才合适
    而且,如果是一些百万级数据的标如果用游标会不会非常占用服务器的资源?
    那如果把Select写在前台,结果集是不是就会通过网络传到Clinet端
    而且可以通过负载平衡来控制返回的纪录数!
    我的理解是否有误,请高手们指正!