最近有个项目,我们被要求把本来写在前台的SQL查询语句,一律以存储过程写在后台,返回数据集后在在前台显示出来,我始终想不通这样做有什么好处,请高手们指点。
我以BDE为例来说:
平时写:
设置好DataBase的Connected
设置好Query的DataBaseName和SQL并且
Query.Open;
然后加入Datasource和感知DataGrid
现在写:
把查询以存储过程的形式写在后台,然后再返回数据集供前台显示
我不习惯这样的写法.谁能告诉我这样写到底有什么好处
啊啊啊啊!
我以BDE为例来说:
平时写:
设置好DataBase的Connected
设置好Query的DataBaseName和SQL并且
Query.Open;
然后加入Datasource和感知DataGrid
现在写:
把查询以存储过程的形式写在后台,然后再返回数据集供前台显示
我不习惯这样的写法.谁能告诉我这样写到底有什么好处
啊啊啊啊!
1.定制方便
2. 企业逻辑集中
3. 客户端维护升级甚至重写都方便
4. 速度又快
5. 界面特别错误提示有利
6. ....
的却把DML的(Insert update Delete)写在后台有这么多优势
但问题是把Select 也写在后台,然后通过数据集返回,这样优势又有何在?
而且返回数据集在MSSQL中是易如反掌,但是在Oracle好像就不那么简单了
我听说用包来来返回的是游标,但是游标如果不关闭,好像中是要
占用服务器的资源的,是不是这样?
而众所周知游标这东西打开后使用完了要关掉的,
那样会不会对前台代码有影响。
我用的是Oracle9i
用ref cursor 返回查询的数据集给Query,再用DataSource显示出来
很明显,Oracle的游标打开后是存在于服务器上的,那样连接用户多了
应该不是很理想,要把Oracle 的 open_cursors改成多大才合适
而且,如果是一些百万级数据的标如果用游标会不会非常占用服务器的资源?
那如果把Select写在前台,结果集是不是就会通过网络传到Clinet端
而且可以通过负载平衡来控制返回的纪录数!
我的理解是否有误,请高手们指正!