5

既存の SqlConnection ストアド プロシージャ コードを使用して (素晴らしい) mvc-mini-profiler を利用しようとしています (EF や L2S は使用せず、SQL Server 2008 への ADO.NET のみを使用します)。ProfiledDb継承された型をこの種のコードに統合する方法についてのガイダンスを探しています。

var con = new SqlConnection("connectionstring");  
var cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
cmd.CommandText = "SP_STORED_PROCEDURE_NAME";
cmd.Paramters.Add("recordsetid",SqlDbType.UniqueIdentifier).Value = recordsetid;
var dSet = new DataSet();
var da = new SqlDataAdapter(cmd);
da.fill(dSet);
<parse DataSet>

表面的には、SQL プロファイラーがこの状況に適用できるように見えるため、従来の ADO.NET ユーザーのためのここでのヘルプは素晴らしいものです。

4

2 に答える 2

4

接続をラップして、DbConnection ファクトリを使用する必要がありますCreateCommand

SqlParameter同様に、params を渡すには、基本インターフェイス メソッドを使用する必要があり、ラップされていないなどの原因を避ける必要があります。

そう:

var cnn = MvcMiniProfiler.Data.ProfiledDbConnection.Get(new SqlConnection(str));
var cmd = cnn.CreateCommand();
var param = cmd.CreateParameter(); 
...

私はDataSetとDataAdapterをテストしていません。正直なところ、最近はこの種のものにDapperを使用しています。再生される場合は、必ず Google コードで報告してください。

于 2011-06-28T12:19:50.307 に答える
3

すべてのSQLがストアドプロシージャにあり、それらを呼び出すADO.NETコードがあるという同様の状況があります。また、満足しているデータアクセス層があるので、MiniProfilerに対応するためにそのチャンクを書き直さなければならないという考えは好きではありません。

したがって、私が解決した妥協点はMiniProfiler.Step()、プロシージャ呼び出しの周りに標準呼び出しを使用することでした。私の場合、ExecuteReader()et alへのすべての呼び出しが基本クラスの一部であるため、すべてのSqlCommandがいくつかの基本メソッド内で実行されることがわかっているので、既存のコードを次のように変更するのは簡単でした。

protected SqlDataReader ExecuteReader()
{
    SqlDataReader reader = null;

    // sqlComm is a member of a base class which this method is part of. I also 
    // happen to know that sqlComm.CommandText will always refer to a stored
    // procedure name so it makes it easy to view in the results.
    using (MiniProfiler.Current.Step(sqlComm.CommandText))
    {
        try
        {
            sqlConn.Open();
            reader = sqlComm.ExecuteReader();
        }
        catch (SqlException exception)
        {
            sqlConn.Close();
            // Error handling removed for brevity...
        } 
    }

    return reader;
}

これはSamの回答ほど良くはないので、結果タブに詳細が表示されないことは間違いありませんが、データアクセスコードをほとんど変更せずにデータベース呼び出しを分析するには十分に機能します。構造。

于 2012-04-25T10:57:06.670 に答える