Why use Store procedure

第一:提高性能

第二:减少网络流量

第三:减少注入式攻击

3.1易受注入式攻击的代码:

3.2优化过的代码

3.3使用存储过程来减少注入攻击

第一:提高性能

当存储过程被创建,它要经过以下几步,第一步,它所包含的T-SQL语句将被分析和解析,并被存储.当第一次被执行时,它将被调出并被优化.SQLServer会根据statistics自动选择相应的优化策略.

此后查询计划将被存储在高速缓存中,以利于将来使用.由于不用被重新编译,所以可以大大提高效率.

第二:减少网络流量

你可能使用T-SQL语句来对表执行插入操作.但是如果我们创建一个存储过程来进行这样操作的话,每次插入的时候只要传输存储过程名,参数和这些参数的数值,当这些操作非常频繁时我们将会发现使用存储过程可以减少额外的网络传输.这在我们使用Internet时进行传输时非常有用.

比较以下两个语句:

   INSERT INTO EmployeeTerritories (EmployeeID, TerritoryID)
   VALUES (3,12345)
   Ins_EmployeeTerritories @empId=3,@terrId=12345

What if an image data type was being uploaded or downloaded?

Anything that is of binary data type, such as images or sounds, and so on, is sent as binary values. These are converted to character strings, and this will double the size of the ad-hoc query that we are sending, when using T-SQL inline.

第一个语句有74个字符,第二个有46个字符,相比而言网络传输量减少了37.84%,如果我们这个插入语句中包括有更多要插入数据的列,并且每天被执行10,000次,将会学杂费280K左右的带宽,

第三:减少注入式攻击

 

3.1易受注入式攻击的代码:

// DANGER! User input used to generate database query

string sql = String.Format ("select count (*) " +

"from users where username=\'{0}\' and cast " +

"(password as varbinary)=cast (\'{1}\' as " +

varbinary)", username, password);

SqlCommand command = new SqlCommand (sql, connection);

int count = (int) command.ExecuteScalar ();

3.2优化过的代码

下面的代码被注入式攻击的机率要少些

// BETTER: Input passed to parameterized command

SqlCommand command = new SqlCommand

("select count (*) from users where " +

"username=@username and cast (password as " +

"varbinary)=cast (@password as varbinary)",

connection);

command.Parameters.Add ("@username", SqlDbType.VarChar).Value = username;

command.Parameters.Add ("@password", SqlDbType.VarChar).Value = password;

int count = (int) command.ExecuteScalar ();

3.3使用存储过程来减少注入攻击

通过存储过程来执行效果会更好

// BEST: Input passed to stored procedure

SqlCommand command = new SqlCommand ("proc_IsUserValid", connection);

command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add ("@username", SqlDbType.VarChar).Value = username;

command.Parameters.Add ("@password", SqlDbType.VarChar).Value = password;

command.Parameters.Add ("@return", SqlDbType.Int).Direction =

ParameterDirection.ReturnValue;

int count = (int) command.ExecuteScalar ();

所以我们应该尽量在我们的应用系统中使用存储过程.

转载于:https://www.cnblogs.com/net2004/archive/2005/04/14/137605.html

使用存储过程的优点.相关推荐

  1. 什么是存储过程,存储过程的优点。及使用。

    定义: 将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令. 讲到这里,可 ...

  2. oracle 存储过程好学吗,想靠Oracle拿高薪,存储过程的优点你是否搞清楚了?

    除了日常的mysql,相信大家都知道Oracle由于其存在的时间之长,也是许多大厂的选择.并且在日常的面试中,熟知Oracle与原本在面试中也是拥有极大的优势.而今天咱们就来说说Oracle中的存储过 ...

  3. MySql的存储过程的优点与缺点

    MySql的存储过程的优点与缺点 一.存储过程优点 二.存储过程的弊端 三.总结 总结下使用存储过程的优缺点 一.存储过程优点 存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句 ...

  4. SQL存储过程的优点

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  5. SQL Server 存储过程的优点

    存储过程的优点 A. 存储过程允许标准组件式编程 存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句.而且数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无 ...

  6. mysql存储过程的利弊_【mysql 存储过程】应用存储过程的优点与缺点

    总结下使用存储过程的优缺点 一.存储过程优点 存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并存储起来,以后当需要 ...

  7. mysql中的存储过程优点_数据库存储过程在优点

    存储过程 sql语句执行的时候要先编译,然后执行.存储过程就是编译好了的一些sql语句.应用程序需要用的时候直接调用就可以了,所以效率会高. 存储过程介绍 存储过程是由流控制和SQL语句书写的过程,这 ...

  8. MS SQL Server存储过程的优点有哪些呢?

    1.存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2.经常会遇到复杂的业务逻辑和对数据库 ...

  9. 简述mysql的存储的优点_MySQL 存储过程 优点和缺点有哪些?

    存储过程的优点主要包括以下几点: 第一点,性能提高.这是相对于不适用存储过程来说的,因为存储过程在创建的时候就编译好了,而后每次调用都不会再次编译,这相对于传统的SQL语句中每次调用都需要编译的情况来 ...

最新文章

  1. TOPSIS算法及代码
  2. 自带中心调整的电单车模型-DongGuan BDS
  3. android s静态广播,重走android(3)广播 · sk600’s Studio
  4. 微信小程序的基础 (一)
  5. Asp.net MVC3.0 基于不同的角色显示不同的菜单
  6. react重新渲染菜单_React实现递归组件
  7. Javascript学习笔记8——用JSON做原型
  8. Hadoop生态基础学习总结
  9. LINUX安装TensorRT及特别注意事项
  10. Redis 集群(学习笔记十)
  11. 学计算机编程有什么用,编程是什么 学习编程的好处
  12. 计算机网络布线开题报告,网络综合布线开题报告.docx
  13. layer在html中的data写法,layerdate.html
  14. BCH的51攻击与防守
  15. vue制作子组件以及在父组件中引入子组件
  16. ae去闪插件deflicker使用_ae去闪烁插件Flicker Free怎么用-ae去闪烁插件Flicker Free的使用教程 - 河东软件园...
  17. CAD如何绘制多边形的外切圆?
  18. Spring常见面试题55道(附答案2023最新版)
  19. latex 数学符号-- 希腊字母、上下标、分数、运算符、箭头、标注、分隔符、省略号、空白间距
  20. 机器学习-无监督学习-聚类:聚类方法(二)--- 基于密度的聚类算法【DBSCAN文本聚类算法,密度最大值文本聚类算法】

热门文章

  1. struts2 spring hibernate 原理
  2. 关于oracle 安装下的LINUX系统参数的优化
  3. Android SrcollView嵌套recyclerView的使用
  4. WebKit 内核源码分析 (一) Frame
  5. Linux(内核和用户态的)动态内存管理
  6. spring核心配置文件引入外部properties文件和另外的xml配置文件
  7. Python_ collections_defaultdict默认字典
  8. 首次使用eclipes运行项目报错“Java.lang.ClassNotFoundException”
  9. Solr学习笔记1(V7.2)
  10. MySQL 5.1完全卸载