阐述ADO.NET存储过程优缺点

之前我们就ADO.NET存储过程介绍过,但是我又看到了关于存储过程的资料,这里就在深入的还大家讨论一下吧。在应用Command对象时,其命令可以是存储过程名称。那么,什么是存储过程?为什么要使用存储过程?首先,看看存储过程的定义。将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,被存储起来的就是存储过程。那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。

ADO.NET存储过程的优缺点:
◆存储过程的主要优点体现在:  
◆减少网络传输,节约时间
◆速度快
◆出错的概率小
◆可利用服务器的一些特殊的资源
◆存储过程的主要缺点体现在:  
◆交互性差
◆不够灵活
◆商业逻辑层与数据库在一起,不易移植

存储过程主要致命的缺点就是:可能如果要更换数据库(比如:从sql server到oracle)的话,你的存储过程就都要重写了。所以它过分依赖数据库端,假如你要做一个工程,是可以的,但是如果你要做一个产品,或者以后可能还会用到这个工程的代码的话,建议少使用。所以任何一种开发方法总有优缺点,不要过分依赖它。

在应用程序中,通常会大量使用ADO.NET存储过程,这是因为

第一,维护方便:如果你把所需要执行的操作代码写在程序当中,那么要做一些小修改,也要对程序做修改并重新编译,对于用户来讲,这个时候就需要对程序加以深度测试(你说只修改了一点点,但是用户不会为你的一句话而冒风险的),存储过程相对来讲就简单得多,毕竟逻辑上分离出来了,即使要进行审核,成本也远比程序要低得多;

第二,重用性:一个设计好的存储过程,任何符合其输入和输出的程序都可以共用,同样也改善了维护工作,如果有10个程序要用到这个存储过程,那要做些修改,自然修改一个存储过程所花费的成本比程序要低得多;

#T#第三,分工的明确化:存储过程如果设计得当,就可以通过一个中间的适配器(Adapter)来调用,如此在将来进行数据库的迁移等,就可以把相应的工作交给具体的熟悉相关数据库等业务的人员,而不是所有的开发人员都要进行了解。就好比MSSQL/Oracle/DB2类似的,如果数据库操作脚本写在程序当中,那么迁移的工作量将会是所有可能的程序。如果是通过存储过程,那就可以交给相应的DBA等来完成;

第四,预编译提高效率:存储过程的预编译,可能性使得语句的执行更优化,特别是对于类似Oracle等具备某些高级优化能力的,那么包括其既定的执行计划等可以带来相当的性能提升;

第五,对于需要多次访问数据的复杂操作:如果写在程序当中,那么就需要不断的或者大量的提取数据库中的数据到程序中进行运算,而如果是使用存储过程,那么就减少了应用程序与数据库的交互次数,如此的消耗明显要低得多。

免责声明:文章内容不代表本站立场,仅供读者参考。产品相关技术问题请发送工单。 本文链接:https://www.idc.net/help/408943/

为您推荐

开源数据收集引擎 Logstash 讲解和示例讲解

一、概述 Logstash 是一个开源的数据收集和日志处理工具,它是 Elastic Stack(ELK Stack)的一部分,用于从各种数据源中采集、转换和传输数据,以帮助分析和可视化大规模数据。Logstash 通常与 Elasticsearch 和 Ki...

八个开源免费单点登录(SSO)系统

单点登录(SSO)是一个登录服务层,通过一次登录访问多个应用。使用SSO服务可以提高多系统使用的用户体验和安全性,用户不必记忆多个密码、不必多次登录浪费时间。 下面推荐一些市场上最好的开源SSO系统,可作为商业SSO替代。 1.Authelia https://github.com/authelia/authelia ...

浅谈HBase数据结构和系统架构

Part 01 LSM树模型 常见的的关系型数据库,如MySQL、SQL Server、Oracle等,使用B+ Tree作为数据存储与索引的基本结构,非叶子节点只存放索引数据,叶子节点存放所有数据和指向相邻节点的指针,具有高效的范围查询和稳定的查找效率,以及具有较小的读放大和空间放大。采用磁盘随机读写方式,且以磁盘数...

微软Radius平台重构现代应用程序部署

微软的 Azure 孵化团队日前推出一个叫 Radius 的新应用平台。Radius 平台可用于在 Kubernetes、公共云和边缘环境中运行各种现代应用程序。 Radius 是一个开源项目,最初支持的应用程序运行时包括Kubernetes、Azure和AWS,以后还会支持诸如谷歌云平台等云环境。 Mark Russ...

Ext JS3.0正式版发布

Ext JS3.0在经历数次RC版之后,extjs.com终于发布3.0的正式版。总体而言,较2.0改进不大,依然还是原理的组件模型,具体更新及改进如下: ◆提供了参照DWR后与后台的通讯包Direct,支持具有明显的REST风格的CRUD服务 ◆一系列的新的组件和例子,包括有图表(Charting, By YUI F...
返回顶部