当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net SqlParameter关于Like的传参数无效问题

ASP.NET
一个有KeepConnection开关的C#的Database类
用控件仅一条指令实现界面换肤和多语言版本
.net datagrid 选择多行
一个用C#写的词法分析程序
关于C#下写的Web Service 服务在Delphi下调用时的问题
多线程填写treeview控件(vb.net)
使用TreeView实现无限级扩展节点
用C#写的一个简单屏幕保护程序
详解对密码执行散列和 salt 运算方法
vb.net的windows窗体实现dos命令
为您的应用程序加上注册的限制
用VS.NET2003制作WEB应用程序的安装包
怎么由DataSet将数据导入Excel?
Visual Basic串口通讯调试方法
QQ验证码识别源代码(C#/NET1.1)
一个用Wsh来控制SqlServer的Dcom的VBs
24点的算法
asp.net 关于form认证的一般设置
和我一起入门Direct3D的VB.net编程
部署ASP.NET的三大技术(1)

ASP.NET 中的 asp.net SqlParameter关于Like的传参数无效问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 193 ::
收藏到网摘: n/a

用传参方式模糊查询searchName 按常规的思路,我们会这样写
复制代码 代码如下:

String searchName ="Sam";
String strSql = "select * FROM Table1 where Name like '%@Name%' ";
SqlParameter[] parameters = {
new SqlParameter("@Name", searchName)
};

但结果是查询不到结果,跟踪代码也没有发现错误,又不想用字符串拼接的方式(防止攻击)。于是跟踪了Sql的执行,发现问题在于Sql给参数自动添加了单引号。
实际上在Sql,将like的代码解析成为了 like '%'Sam'%' ",所以,你怎么查也都得不到想要的结果。
据此,我们可以将代码改成:
复制代码 代码如下:

String searchName ="Sam";
String strSql = "select * FROM Table1 where Name like @Name ";
searchName = "%"+searchName+"%"; //注意不用加单引号,传参到Sql语句中会自动添加
SqlParameter[] parameters = {
new SqlParameter("@Name", searchName)
};

这样,就可以达到想要的查询结果。