首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法使用Dapper跟踪\记录sql?

有没有办法使用Dapper跟踪\记录sql?
EN

Stack Overflow用户
提问于 2013-08-30 17:50:18
回答 2查看 35.4K关注 0票数 46

有没有办法将生成的sql转储到调试日志或其他什么地方?我在winforms解决方案中使用它,所以mini-profiler的想法对我不起作用。

EN

回答 2

Stack Overflow用户

发布于 2016-10-14 23:15:21

这并不是详尽的,本质上也有些繁琐,但是如果你有sql并且你想初始化你的参数,它对于基本的调试是有用的。

public static class DapperExtensions
    {
        if (args is null) throw new ArgumentNullException(nameof(args));
        public static string ArgsAsSql(this DynamicParameters args)
        {
            var sb = new StringBuilder();
            foreach (var name in args.ParameterNames)
            {
                var pValue = args.Get<dynamic>(name);

                var type = pValue.GetType();

                if (type == typeof(DateTime))
                    sb.AppendFormat("DECLARE @{0} DATETIME ='{1}'\n", name, pValue.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                else if (type == typeof(bool))
                    sb.AppendFormat("DECLARE @{0} BIT = {1}\n", name, (bool)pValue ? 1 : 0);
                else if (type == typeof(int))
                    sb.AppendFormat("DECLARE @{0} INT = {1}\n", name, pValue);
                else if (type == typeof(List<int>))
                    sb.AppendFormat("-- REPLACE @{0} IN SQL: ({1})\n", name, string.Join(",", (List<int>)pValue));
                else
                    sb.AppendFormat("DECLARE @{0} NVARCHAR(MAX) = '{1}'\n", name, pValue.ToString());
            }

            return sb.ToString();
        }
    }

然后,您可以在即时窗口或监视窗口中使用它来抓取SQL。

票数 4
EN

Stack Overflow用户

发布于 2018-01-04 00:21:35

只是在这里添加一个更新,因为我看到这个问题仍然有相当多的命中-这些天我使用Glimpse (似乎它现在已经死了)或Stackify Prefix,它们都有sql命令跟踪功能。

这并不完全是我问原始问题时想要的,但解决了同样的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18529965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档