阿不

不抛弃,不放弃

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  158 随笔 :: 0 文章 :: 2073 评论 :: 66 Trackbacks
用DataTable.Select(string)或给DataView.RowFilter设置Expression表达式时,由于Expression是字符串拼接而成的,因为跟SQL语句也要注意单引号问题.如这个的查询会导致异常的发生:
DataRow[] m_drResult = dt.Select("name = 'name's'");
解决办法是将一个单引号变成两个(跟SQL语法是一样的).
DataRow[] m_drResult = m_dtSource.Select("name = 'name''s'")

所以在使用Select方法或DataView的时候,一定要注意把字符条件值的一个单引号改成两个单引号,执行
str = str.Replace("'","''");!!
这点如果不注意会给程序带来不小的麻烦!
阿不 http://hjf1223.cnblogs.com
posted on 2005-08-31 16:25 阿不 阅读(3832) 评论(7)  编辑 收藏 所属分类: .Net相关技术流水帐

评论

#1楼  2005-08-31 17:04 linkcd      
str = str.Replace("'","''");不是会把所有单引号(包括正确的)都替换掉么?

Name = 'theName'

=>

Name = ''theName''
  回复  引用  查看    

#2楼 [楼主] 2005-08-31 17:12 §猪阿不猪§      
当然不能把整个表达式拿来替换,是在拼接表达式的时候,对值进行替换.
如:
str = str.Replace("'","''");
string m_strFilter = string.Format("name = '{0}'",str);
  回复  引用  查看    

#3楼  2005-08-31 17:50 农耕时代      
所有用户输入的全部要替换的,不然就会有SQL注入漏洞
  回复  引用  查看    

#4楼  2005-08-31 18:15 linkcd      
http://linkcd.cnblogs.com/archive/2005/08/31/227276.html
  回复  引用  查看    

#5楼 [楼主] 2005-08-31 18:45 §猪阿不猪§      
农耕时代 :说得没错,所有的用户输入都要替换,介是SQL注入漏洞应该没那么严重吧,最多只是引发异常,我这边只是在对DataTable进入操作,并没有与数据库直接交互.

  回复  引用  查看    

#6楼  2006-03-07 17:33 韦恩卑鄙      
是的 datatable 是解决注入的好办法

  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: