最近再做一個項目,出現一個小bug,bug雖小,但是卻要命啊。下面我show下我解決問題的方法。
View層代碼:
@model List<mhq.Blog.Model.Blog> <blockquote class="layui-elem-quote">文章管理</blockquote> <div style="padding:10px;"> <div> <a class="layui-btn" href="~/Admin/Blog/Add"> <i class="layui-icon"></i> 添加 </a> </div> <table class="layui-table"> <thead> <tr> <th>發布時間</th> <th>boke標題</th> <th>所屬分類</th> <th>訪問量</th> <th>排序號</th> <th>管理</th> </tr> </thead> <tbody> @foreach (var blog in Model) { <tr> <td>@blog.createdate.ToString("yyyy-MM-dd HH:mm")</td> <td>@blog.title</td> <td>@blog.caname</td> <td>@blog.visitnum</td> <td>@blog.sort</td> <td> <a style="margin-right:20px" href="~/Admin/Blog/Add/@blog.id"> <i class="layui-icon"></i> 編輯 </a> <a href="javascript:void()0;" onclick="del(@blog.id)"> <i class="layui-icon"></i> 刪除 </a> </td> </tr> } </tbody> </table> </div> <script> /* 刪除*/ function del(id) { layui.use('layer', function () { var layer = layui.layer; var $ = layui.jquery; layer.confirm("是否確認刪除?", function () { var url = "/Admin/Blog/Del/" + id; $.post(url, function (data) { layer.alert(data, function () { location.reload(); }); }) }) }) } </script>
Controller層代碼:
public IActionResult Index() { List<Model.Blog> list = dal.GetList(" 1=1 order by sort asc,id desc"); return View(list); }
Dal層代碼:
/// <summary> /// 查詢 /// </summary> /// <param name="cond">查詢條件</param> /// <returns></returns> public List<Model.Blog> 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<Model.Blog>(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了。
