关于C#SqlParameter传参进行模糊查询遇到的问题!

来源:互联网 发布:单片机反编译 编辑:程序博客网 时间:2024/06/04 00:26
今天写作业碰到的问题,自己纠结,检查折腾了半小时,觉得实在不行了,开始百度,百度上也没有太确切的答案
,也不是没有答案,就是太难找到了,并且大神讲的太深奥,原理是没看懂,但是解决办法学会了,下面贴代码
StringBuilder strSql = new StringBuilder();
            strSql.AppendLine("select stu.studentno,sub.subjectid,r.StudentResult,r.examdate,r.id");
            strSql.AppendLine("from student as stu inner join result as r on (stu.studentNo=r.studentNo)");
            strSql.AppendLine("inner join subject as sub on(r.subjectid=sub.subjectid) where 1=1");
            if (subjectId != 0)
            {
                strSql.AppendLine("and r.subjectid=@subjectid");
            }
            if (name != "")
            {
                strSql.AppendLine("and stu.studentname like @name ");
            }
            using( SqlCommand cmd=new SqlCommand(strSql.ToString(),dbHelper.Connection))
            {
                try
                {
                   
                   
                    SqlParameter[] parameters = {
                                                new SqlParameter("@subjectid",subjectId),
                                                new SqlParameter("@name","%"+name+"%")
                                                };
问题在红色代码部分,解决办法在绿色代码部分,
先说红色代码的问题把and stu.studentname like ‘%@name%’ 如果这里这样写,SqlCommand执行的时候会无法识别参数,
会直接把sql语句也构建成like ‘%@name%’   等于就是在根据字符串@name数据库模糊查找,而不是@name真实的值
解决办法就是直接在@name的值内进行拼接,也就是绿色代码的部分new SqlParameter("@name","%"+name+"%")直接在
这里进行拼接,然后构建Sql语句的时候like后不要带单引号就OK了。
阅读全文
1 0