当前位置:首页 > C#教程 > C#高级

C# 平时碰见的问题【4】

1. 模糊查询 like的参数化写法

string keyword="value"; // 要模糊匹配的值

错误示范:    

      sql:    string strSql="select * from [Table]  where [Field] like %@Field%";

      参数: System.Data.SqlClient.SqlParameter[] parms = new[] { 

              new System.Data.SqlClient.SqlParameter("@Field",System.Data.SqlDbType.VarChar,400)
              };
          parms[0].Value = keyWord ;

输出:    ado.net 给我们输出的参数 SQL语句 还是原原本本的 select * from [Table]  where [Field] like %@Field%  SQL语句错误

解决办法(1):

sql :   string strSql="select * from [Table]  where [Field] like ‘%‘+@Field+‘%‘ "

 这样ado.net 就能将参数正确的输入了

解决办法(2):

sql:    string strSql="select * from [Table]  where [Field] like @Field";

      参数: System.Data.SqlClient.SqlParameter[] parms = new[] { 

              new System.Data.SqlClient.SqlParameter("@Field",System.Data.SqlDbType.VarChar,400)
              };
          parms[0].Value = "%"+keyWord +"%";

分析:

      我们期望最后传输到数据库的 like语句应该是: select * from [Table] like [Field] like ‘%value%‘ ;  

      直接%@Field%,污染了ado.net的参数标示@符号导致无法正确替换参数;

      方法一在sql语句中拼接字符串的方式来得到如 ‘%value%‘的值;  注:sql语句中 字符串用单引号来作为字符串的起始符, 而sql server中以 + 号 拼接字符串. 所以‘%value%‘等同于 ‘%‘+value‘%‘

      方法二则直接在赋值语句中加入模糊匹配符;

原文:http://www.cnblogs.com/mushishi/p/4110417.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐