您的位置:首页 > 数据库

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

2017-05-24 02:56 281 查看
今天写作业碰到的问题,自己纠结,检查折腾了半小时,觉得实在不行了,开始百度,百度上也没有太确切的答案
,也不是没有答案,就是太难找到了,并且大神讲的太深奥,原理是没看懂,但是解决办法学会了,下面贴代码
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了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: