|M| 从零开始学习存储过程第十贴:写了存储过程,但CSDN朋友都说组SQL不能防止注入和' 那我这写的第一条存储过程要怎么改 谢谢  急
因为自己查询的时候拼写SQL语句的时候不能够防止用户输入 '出错的问题 
 (又不想去打如 '转成 ' ') 
 后来听说用SQL存储过程可以解决这个问题 
 然后学习了存储过程的写法,写了以下一条查询语句   
 CREATE   Procedure   COrder_Search( 
 @OrderID   int,		 
 @MemberID   int,   		 
 @MyClass   nvarchar(8),   	 
 @MyDayBegin   datetime,   	 
 @MyDayEnd   datetime,   		 
 @MyState   int,		 
 @MyPayID   int,			 
 @MyPostID   int,			 
 @MyName   nvarchar(20) 
 ) 
 AS 
 Declare   @sql   nvarchar(1000) 
 Declare   @iWhere   nvarchar(1000) 
 Set   @sql= 'SELECT   *   FROM   B2COrder ' 
 Set   @iWhere= '   Where   1=1 ' 
 	if   @OrderID    <>    -1 
 	Begin 
 		Set   @iWhere=@iWhere   +    'And   OrderID   =    '   +   convert(nvarchar,@OrderID) 
 	End 
 	if   @MemberID    <>    -1 
 	Begin 
 		Set   @iWhere=@iWhere   +    'And   MemberID   =    '   +   convert(nvarchar,@MemberID) 
 	End 
 	if   @MyClass    <>     ' ' 
 	Begin 
 		Set   @iWhere=@iWhere   +    'And   MyClass   =    ' ' '   +   @MyClass   +    ' ' ' ' 
 	End 
 	if   @MyDayBegin   >     '1900-01-01 ' 
 	Begin 
 		Set   @iWhere=@iWhere   +    '   And   DateDiff(d,MyDay, ' ' '   +         convert(nvarchar,@MyDayBegin   )   +    ' ' ')    <=   0 ' 
 	End 
 	if   @MyDayEnd   >     '1900-01-01 ' 
 	Begin 
 		Set   @iWhere=@iWhere   +    '   And   DateDiff(d,MyDay, ' ' '   +   convert(nvarchar,@MyDayEnd   )+    ' ' ')   > =0 ' 
 	End 
 	if   @MyState    <>    -1 
 	Begin 
 		Set   @iWhere=@iWhere   +    'And   MyState   =    '   +   convert(nvarchar,@MyState   ) 
 	End 
 	if   @MyPayID    <>    -1 
 	Begin 
 		Set   @iWhere=@iWhere   +    'And   MyPayID   =    '   +   convert(nvarchar,@MyPayID   ) 
 	End 
 	if   @MyPostID    <>    -1 
 	Begin 
 		Set   @iWhere=@iWhere   +    'And   MyPostID   =    '   +   convert(nvarchar,@MyPostID   ) 
 	End 
 	if   @MyName    <>     ' ' 
 	Begin 
 		Set   @iWhere=@iWhere   +    '   And   MyName   Like    ' '% '   +   @MyName   +    '% ' ' ' 
 	End 
 Set   @sql=@sql   +   @iWhere 
 Execute   sp_executesql   @sql 
 GO   
 像我以上的查询功能要防止注入和 '   要怎么办呢 
 谢谢      急
------解决方案--------------------if CHARINDEX( 'and ', @MyClass)> 0 
 Return 
------解决方案--------------------帮顶,同样的问题,还没解决思路
------解决方案--------------------防SQL注入我也没多少经验 
 我现在就是用验证控件验证或用存储过程验证用户输入的数据是否合法,对字符串类型的数据过滤掉  ' select delect insert update 等关键字  
 另外  连接时不要用SA做连接
------解决方案--------------------字符传进存储过程的时候先做相应的替换吧
------解决方案--------------------