VS2017一步一步断点调试解决Dapper语句出现的Bug


最近再做一个项目,出现一个小bug,bug虽小,但是却要命啊。下面我show下我解决问题的方法。

View层代码:

@model List

class="layui-elem-quote">文章管理
"padding:10px;"> class="layui-table"> @foreach (var blog in Model) { }
发布时间 boke标题 所属分类 访问量 排序号 管理
@blog.createdate.ToString("yyyy-MM-dd HH:mm") @blog.title @blog.caname @blog.visitnum @blog.sort "margin-right:20px" href="~/Admin/Blog/Add/@blog.id"> class="layui-icon"> 编辑 "javascript:void()0;" onclick="del(@blog.id)"> class="layui-icon"> 删除

Controller层代码:

 public IActionResult Index()
        {
            List  list = dal.GetList(" 1=1 order by sort asc,id desc");
            return View(list);
        }

Dal层代码:

        /// 
        /// 查询
        /// 
        /// 查询条件
        /// 
        public List GetList(string cond)
        {
            // Dapper – Simple List
            using (var connection = ConnectionFactory.GetOpenConnection())
            {
                string sql = "select * from blog ";
                if (!string.IsNullOrEmpty(cond))
                {
                    sql=sql+$" where{cond}";
                }
                var list = connection.Query(sql).ToList();
                return list;
            }
        }

我这里出现的错误是“System.Data.SqlClient.SqlException:““=”附近有语法错误。”如图:

解决方法:

1、首先在此处方法上添加断点,如图:

 2、运行程序到此断点(F5运行程序)

 3、单步运行(F11

sqllist添加监视,我们可以清楚的看到list里面的查询语句为:

select * from blogwhere1=1 order by sort asc,id desc

显然这是错误的查询语句。

如图:

正确的应为:

select * from blog where 1=1 order by sort asc,id desc

也就是说blogwhere之间和where1=1之间缺少空格。

所以我们只要在相关的代码中加上空格就OK了。