关于ASP.NET的模糊查询在代实际代码中显示的问题

gjmding 2018-11-17 08:57:33
string sqlStr = "select * from stuInfo where stuName like @stuName ";
SqlCommand myCmd = new SqlCommand(sqlStr, myConn);
myCmd.Parameters.Add("@stuName", SqlDbType.VarChar, 50).Value = "'%" + this.txtName.Text.Trim() + "%'";
SqlDataAdapter myDa = new SqlDataAdapter(myCmd);
DataSet myDs = new DataSet();
myDa.Fill(myDs);
-----------------------------------------------------------------------------------
我试过在sqlStr的查询语句上更改为 stuName like @‘%stuName %’,或者是 stuName like ‘%@stuName%’,毫无作用;
也试过在parameter.add后面改为同样的语句,也没有作用。
最后想着强制更改为‘%+textbox的内容+%’,同样无效

最后解决方式为
改为如下即可
myCmd.Parameters.Add("@stuName", SqlDbType.VarChar, 50).Value ="%"+this.txtName.Text.Trim()+"%";

但是其中有个问题,在SQL中模糊查询的语法应该是 like '%+模糊内容+%' ,此处传参传的应该是%+模糊内容+%
不知道这个问题是怎么产生的,或者是我自己的理解有什么问题?
...全文
167 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
早起晚睡 2018-11-21
  • 打赏
  • 举报
回复
简单的查询我就拼接,复杂的我就写存储过程传参数!
lsy999 2018-11-21
  • 打赏
  • 举报
回复
编码习惯很重要
吉普赛的歌 2018-11-21
  • 打赏
  • 举报
回复
引用 11 楼 gjmding 的回复:
感谢 我一开始的想法也是这样,但是在赋值这一方面没有弄清楚到底是怎么赋值的,没有弄清楚@parameter是一个参数,[/quote] 嗯, 想清楚就好, 没事就结贴吧。
gjmding 2018-11-21
  • 打赏
  • 举报
回复
引用 9 楼 吉普赛的歌 的回复:
C# 最终还是要访问数据库, 最终还是要在数据库中执行, 所以这种程序而言,C# 只不过是数据库的一个客户端而已。 暂时忘记 C# , 看下数据库中要实现模糊查询, 可以怎样做:
USE tempdb
GO
IF OBJECT_ID('stuInfo') IS NOT NULL DROP TABLE stuInfo
GO
CREATE TABLE stuInfo(
	stuId INT IDENTITY(1,1) PRIMARY KEY,
	stuName NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO stuInfo(stuName) VALUES(N'小明');
INSERT INTO stuInfo(stuName) VALUES(N'小华');
GO
-------- 以上为测试表及测试数据 ---------

--1. 最原始的写法
SELECT * FROM stuInfo AS si WHERE si.stuName LIKE N'%华%'
--2. 字符串变量中不带 % 的写法(将上面 '%华%' 全部替换为变量即可)
DECLARE @stuName NVARCHAR(20)
SET @stuName=N'%华%'
SELECT * FROM stuInfo AS si WHERE si.stuName LIKE @stuName
--3. 字符串变量中不带 % 的写法
DECLARE @stuName2 NVARCHAR(20)
SET @stuName2=N'华'
SELECT * FROM stuInfo AS si WHERE si.stuName LIKE '%' + @stuName2 + '%'
感谢 我一开始的想法也是这样,但是在赋值这一方面没有弄清楚到底是怎么赋值的,没有弄清楚@parameter是一个参数,
gjmding 2018-11-21
  • 打赏
  • 举报
回复
引用 6 楼 以专业开发人员为伍 的回复:
我的习惯,是把不同层次的软件设计首先给捋顺了,保持设计跟实现时的一致性。所以这种为用户输入添加 % 符号的代码,我会更愿意写到 sql 中,因为这就保持你的 sql 设计跟 c# 设计的需求逻辑一致了。当然如果你把 sql 的理念改一下,认为 stuName 这个变量代表的不是用户输入的姓名而是一个 t-sql 通配符表达式,那么也是可以的,需要在编程设计之前先把编程需求说清楚就行了。
感谢 已经了解清楚
吉普赛的歌 2018-11-20
  • 打赏
  • 举报
回复
C# 最终还是要访问数据库, 最终还是要在数据库中执行, 所以这种程序而言,C# 只不过是数据库的一个客户端而已。 暂时忘记 C# , 看下数据库中要实现模糊查询, 可以怎样做:
USE tempdb
GO
IF OBJECT_ID('stuInfo') IS NOT NULL DROP TABLE stuInfo
GO
CREATE TABLE stuInfo(
	stuId INT IDENTITY(1,1) PRIMARY KEY,
	stuName NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO stuInfo(stuName) VALUES(N'小明');
INSERT INTO stuInfo(stuName) VALUES(N'小华');
GO
-------- 以上为测试表及测试数据 ---------

--1. 最原始的写法
SELECT * FROM stuInfo AS si WHERE si.stuName LIKE N'%华%'
--2. 字符串变量中不带 % 的写法(将上面 '%华%' 全部替换为变量即可)
DECLARE @stuName NVARCHAR(20)
SET @stuName=N'%华%'
SELECT * FROM stuInfo AS si WHERE si.stuName LIKE @stuName
--3. 字符串变量中不带 % 的写法
DECLARE @stuName2 NVARCHAR(20)
SET @stuName2=N'华'
SELECT * FROM stuInfo AS si WHERE si.stuName LIKE '%' + @stuName2 + '%'
一叶无秋 2018-11-20
  • 打赏
  • 举报
回复
写法就是个问题:
select * from stuInfo where stuName like %@stuName%
123321... 2018-11-20
  • 打赏
  • 举报
回复
语句中引号和单引号没有正确
  • 打赏
  • 举报
回复
我的习惯,是把不同层次的软件设计首先给捋顺了,保持设计跟实现时的一致性。所以这种为用户输入添加 % 符号的代码,我会更愿意写到 sql 中,因为这就保持你的 sql 设计跟 c# 设计的需求逻辑一致了。当然如果你把 sql 的理念改一下,认为 stuName 这个变量代表的不是用户输入的姓名而是一个 t-sql 通配符表达式,那么也是可以的,需要在编程设计之前先把编程需求说清楚就行了。
  • 打赏
  • 举报
回复
嗯,如果你设计 sql 语句是假设输入时就必须输入前后 % 符号的话,并且你的 c# 代码有需要用户输入时前后不需要输入 % 符号这种有点自相矛盾的设计的话,那么就写
myCmd.Parameters.Add("@stuName", SqlDbType.VarChar, 50).Value = "%" + this.txtName.Text.Trim() + "%";
也就是说不要写单引号。
  • 打赏
  • 举报
回复
参数化查询就是
param like @param
通配符 %_之类的就是字符串param的组成部分之一 如果你写成 '%param%',这时候param就只表示字符串
  • 打赏
  • 举报
回复
另外,作为一种比较快捷的方式,其实可以拼接 sql 字符串,有时候要比 sql 参数形式来得更加直接了当。例如
sql = "......... like '%" + this.txtName.Text.Trim().Replace("'","''") + "%'";
这样来写代码,到底是拼接字符串形式还是参数形式更加简洁,你可以自己选择。没有必要硬要规定只能用参数形式。 要注意,通常必须写 Replace 函数,以保证符合 t-sql 语法(必须将字符串常量中的单引号替换为两个单引号)。 拼接字符串,这样写代码,有时候比参数形式反而简单。特别是可以直接打印最终的 sql 语句放到日志里边。
  • 打赏
  • 举报
回复
你把 @符号写到字符串常量中,写成
like '%@stu%'
这个只能被 t-sql 语法解析为一部分字符串,不会解析为你用了什么变量。
  • 打赏
  • 举报
回复
你写的那些,不合 t-sql 语法。 按照规范的语法,应该写为
like '%' + @stu + '%'

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧