在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

怎么写出易调试的SQL

162次阅读
没有评论

共计 2384 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要介绍了怎么写出易调试的 SQL,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

1. 前言

相比高级语言的调试如 C# , 调试 SQL 是件痛苦的事 . 特别是那些上千行的存储过程, 更是我等码农的噩梦.

在将上千行存储过程的 SQL 分解到 C# 管理后, 也存在调试的不通畅, 如何让调试流畅些呢

2. 常见调试

2.1 通常在 Dapper 里面一个断点下去, 抓到类似如下 SQL:

SELECT a.* FROM dbo.ptype a INNER JOIN dbo.PType_Price b ON a.typeId=b.PTypeID LEFT JOIN dbo.PType_Units c ON a.typeId=c.UnitsId WHERE a.typeId=@typeid AND a.CreateDate=@Area AND preprice1=@preprice1 AND deleted=@deleted

各种 @符号, 需要手工替换后才能调试 (麻烦), 要是能抓到最终 SQL 就好了

2.2 庆幸的是可以通过 SQLServer Profiler 来抓到最终 SQL

但是生产环境中的 SQLServer, 并发执行的 SQL 非常多, 如上图所见, 在一大堆 SQL 里面找到你刚才执行的 SQL 也比较麻烦, 即使可以 Ctrl  + F 调出搜索框来搜索, 也要想个好的关键字来搜索 , 麻烦.

3. 解决方案

既然我们想要最终的 SQL , 为毛不在丢给 Dapper 执行前, 就已经是最终 SQL 了呢, 上工具代码:

public class SqlHelper { public Dictionary string, object  Param = new Dictionary string, object  public string ReplaceParam(ref string sql) { if (Param.Count == 0) { return sql; } StringBuilder sb = new StringBuilder(); sb.Append(sql); foreach (var item in Param) { var paramName = item.Key; var paramValue = item.Value; var type = paramValue.GetType(); if (type == typeof(string) || type == typeof(DateTime)) { // 字符串  sb.Replace($ @{paramName} , $ {paramValue}  } else if (type == typeof(bool)) { //bool  类型  if (paramValue.ToString() ==  True ) { sb.Replace($ @{paramName} ,  1  } else { sb.Replace($ @{paramName} ,  0  } } else { // 数值  sb.Replace($ @{paramName} , paramValue.ToString()); } } sql = sb.ToString(); return sql; } }

调用示例:

public IEnumerable Ptype  GetPtypeDetail() { var sql = @  SELECT a.* FROM dbo.ptype a INNER JOIN dbo.PType_Price b ON a.typeId=b.PTypeID LEFT JOIN dbo.PType_Units c ON a.typeId=c.UnitsId WHERE a.typeId=@Typeid AND a.CreateDate=@CreateDate AND preprice1=@preprice1 AND deleted=@deleted   var sqlHelper = new SqlHelper(); sqlHelper.Param.Add(Typeid ,  001  sqlHelper.Param.Add( CreateDate , DateTime.Now); sqlHelper.Param.Add(preprice1 , 3.62M); sqlHelper.Param.Add(deleted , true); sqlHelper.ReplaceParam(ref sql); IEnumerable Ptype  plist = new List Ptype  using (var con = SQLServerHelper.GetConnection()) { plist = con.Query Ptype (sql); } return plist; }

这样丢给 Dapper 执行的 SQL 始终是最终 SQL, 就不用煞费苦心去抓了.

PS: 有人可能会质疑这样替换的效率, 不用担心已测试 , C# 的字符串替换是非常快的, 上面的调用实例, 当时的测试结果是 微妙和纳秒级别,   有兴趣的看管可以再测试.

4. ***

现在丢给 Dapper 执行的不再是 充满 @参数的 SQL , 而是一个替换好的最终 SQL.

这样当老板隔老远吼道你说: 小蒋, 你 tm 有个 XX bug , 赶紧看看.

你可以不慌不忙的在 Dapper Query 处打个断点

鼠标放在 SQL 变量上, 轻松的拿到最终 SQL 进行调试, 而不是, 手动去替换 @参数, 又或则在 SQLServer Profiler   里面大海捞针了!!!

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“怎么写出易调试的 SQL”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计2384字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产xxxx69免费大片 | 色综合久久综合欧美综合 | 午夜免费福利片观看 | 久爱无码精品免费视频在线观看 | 粉色午夜视频 | 日韩 欧美 综合 在线 制服 | 亚洲高清视频在线播放 | 日本一级淫片a 免费播放口 | 高清欧美一区二区三区 | 1级a的观看视频 | 毛片视频免费网站 | 国产麻豆md传媒视频 | 久久精品2019www中文 | 国产精品国产三级国产av′ | 亚洲不卡中文字幕 | 久操视频在线观看免费 | 国产精品亚洲片夜色在线 | 中文字幕人妻无码系列第三区 | 天堂资源官网在线资源 | 免费黄色的网站 | 日韩欧美一级大片 | 国产欧美乱码在线看 | 久久久99精品 | 亚洲精品一区二区三区美女 | 人人爱人人射 | 日本道色综合久久影院 | 国产精品久久毛片蜜月 | 色婷婷久久综合中文久久蜜桃av | 久久久久色 | 国产精品户外野外 | 小妖精又紧又湿高潮h视频69 | 国产精品区牛牛影院 | 亚洲日本va午夜在线影院 | 精品一区二区三区东京热 | 国产精品福利视频一区二区三区 | 人妻美妇疯狂迎合 | 国产成人免费片在线观看 | 欧美一级毛片国产一级毛片 | 影音先锋女人av鲁色资源网久久 | 一区免费视频 | 一本色道久久综合狠狠躁篇 |