2012-09-17 23 views
6

Tengo una función de conexión db existente en una aplicación de formularios web que me gustaría integrar con mini profiler. Tengo mini perfilador instalado y ejecutándose en la aplicación, pero parece que no puedo conectar la porción de la base de datos correctamente. A continuación, se muestra una parte del código que conectamos con la base de datos.Mini Profiler se integra con SqlConnection

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; 
       } 
      } 
     } 
    } 
} 

puedo poner fácilmente un paso alrededor de la ExecuteReader(), así:

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

pero esto hace que el pequeño generador de perfiles tan útil como traza y estoy deseando conseguir la consulta características mostradas en el sitio. ¿Alguna ayuda?

Respuesta

1

@aghilas respuesta estaba usando alguna otra biblioteca, pero fue suficiente como para señalar mi error que no era capaz de me descifrar antes

Terminé teniendo que cambiar de usar SqlConnection a usar DbConnection y lo mismo para SQLCommand => DbCommand, y SQLDataReader => DbDataReader. Esto permitió que el ProfiledDbConnection se conectara correctamente.

... 
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; 
       } 
      } 
     } 
    } 
Cuestiones relacionadas