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() { Listlist = 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)
对sql、 list添加监视,我们可以清楚的看到list里面的查询语句为:
select * from blogwhere1=1 order by sort asc,id desc
显然这是错误的查询语句。
如图:
正确的应为:
select * from blog where 1=1 order by sort asc,id desc
也就是说blog与where之间和where与1=1之间缺少空格。
所以我们只要在相关的代码中加上空格就OK了。