控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

sql存储过程

作者:佚名 出处:互联网 2011年11月11日 阅读:

sql存储过程

存储过程本身就采用参数传递的方式
  在执行时不会将传入的参数值做为sql的可执行代码 只会简单的做为参数的值
  所以不用过滤
  这和.NET中给sql语句传参数过滤是一个道理
存储过程执行一次后会被缓存起来 执行效率会高很多

 

CREATE PROCEDURE dbo.QueryCustomers
(
@CompanyName nvarchar(30),
@CustomerID nvarchar(12),
@ContactTitle nvarchar(30)
)
AS
  DECLARE @STR nvarchar(255)
  DECLARE @WK nvarchar(255)
  SET @STR = 'SELECT * FROM Customers'
  SET @WK = ''
   
  IF NOT @CompanyName IS NULL  
  SET @WK = @WK + ' CompanyName LIKE ''%'+@CompanyName+'%'' AND '
   
  IF NOT @CustomerID IS NULL  
  SET @WK = @WK + ' CustomerID LIKE ''%'+@CustomerID+'%'' AND '
   
  IF NOT @ContactTitle IS NULL  
  SET @WK = @WK + ' ContactTitle LIKE ''%'+@ContactTitle+'%'' AND '
   
  IF LEN(@STR) > 0
  BEGIN
  SET @STR = @STR+' WHERE '+SUBSTRING(@WK,0,LEN(@WK)-3)
  exec sp_executesql @STR
  End  
  ELSE
  exec sp_executesql @STR
那你说存储过程这样写的话会不会被注入?
还是会被注入。解决主案如下:
CREATE PROCEDURE dbo.SafeQueryCustomers
(
@CompanyName nvarchar(30),
@CustomerID nvarchar(12),
@ContactTitle nvarchar(30)
)
AS
  DECLARE @STR nvarchar(255)
  DECLARE @WK nvarchar(255)
  SET @STR = 'SELECT * FROM Customers'
  SET @WK = ''
   
  IF NOT @CompanyName IS NULL  
  BEGIN
  SET @WK = @WK + ' CompanyName LIKE @pCompanyName AND '
  SET @CompanyName = '%' +@CompanyName + '%'
  END  
   
  IF NOT @CustomerID IS NULL  
  BEGIN
  SET @WK = @WK + ' CustomerID LIKE @pCustomerID AND '
  SET @CustomerID = '%' +@CustomerID + '%'
  END  
   
  IF NOT @ContactTitle IS NULL  
  BEGIN
  SET @WK = @WK + ' ContactTitle LIKE @pContactTitle AND '
  SET @ContactTitle = '%' +@ContactTitle + '%'
  END  
   
  IF LEN(@STR) > 0
  BEGIN
  SET @STR = @STR+' WHERE '+SUBSTRING(@WK,0,LEN(@WK)-3)
  exec sp_executesql @STR,
N'@pCompanyName nvarchar(30),@pCustomerID nvarchar(12),@pContactTitle nvarchar(30)', 
@pCompanyName=@CompanyName,@pCustomerID=@CustomerID,@pContactTitle=@ContactTitle
  End  
  ELSE
  exec sp_executesql @STR

 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统