Mini Profiler与SqlConnection的集成

7

我在一个Web Forms应用程序中有一个现有的数据库连接函数,我希望将其与mini profiler集成。 我已经在应用程序上安装并运行了mini profiler,但是似乎无法正确连接数据库部分。下面是我们连接到数据库的一部分代码。

public override IEnumerable<IDataRecord> Execute()
{
    using( SqlConnection conn = new SqlConnection( ConnectionString ) ) {
        using( SqlCommand command = new SqlCommand( CommandText, conn ) ) {
            command.CommandType = SQLCommandType;
            foreach( SqlParameter p in ParamsToAdd ) {
                command.Parameters.Add( p );
            }
            conn.Open();
            SqlDataReader rdr;
            try {
                rdr = command.ExecuteReader();
            } catch( Exception ex ) {
                //log error
            }
            using( rdr ) {
                while( rdr.Read() ) {
                    yield return (IDataRecord)rdr;
                }
            }
        }
    }
}

我可以轻松地在ExecuteReader()周围添加一个步骤,如下所示:

using( MiniProfiler.Current.Step( command.CommandText ) ) {
    rdr = command.ExecuteReader();
}

但是这使得小型分析器与跟踪工具一样有用,而我希望在网站上显示查询功能。有什么帮助吗?
2个回答

11

1
尝试让它工作,但我得到了“miniprofiler不包含数据定义”的错误。 - ThunD3eR

1
@aghilas的回答使用了其他库,但足以指出我之前无法解决的错误。
最终,我不得不从使用SqlConnection更改为使用DbConnection,同样的SQLCommand => DbCommand,以及SQLDataReader => DbDataReader。这使得ProfiledDbConnection能够正确连接。
...
using StackExchange.Profiling;
using StackExchange.Profiling.Data;
...
using( DbConnection conn = new ProfiledDbConnection( new SqlConnection( ConnectionString ), MiniProfiler.Current ) ) {
        using( DbCommand command = conn.CreateCommand() ) {
            command.CommandText = CommandText;
            command.Connection = conn;
            command.CommandType = SQLCommandType;
            foreach( SqlParameter p in ParamsToAdd ) {
                command.Parameters.Add( p );
            }
            conn.Open();
            DbDataReader rdr;
            try {
                rdr = command.ExecuteReader();
            } catch( Exception ex ) {
                //log error
            }
            using( rdr ) {
                while( rdr.Read() ) {
                    yield return (IDataRecord)rdr;
                }
            }
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接