2009-12-10 7 views
1

Nous avons des tests unitaires pour notre couche d'accès aux données. Cela a aidé à détecter les erreurs de syntaxe sql.
Maintenant que nous avons ces tests, je voudrais aller un peu plus loin. Je voudrais lancer les tests unitaires et trouver sql qui a un nombre élevé de lectures logiques, automatiquement (pour trouver sql nécessitant un réglage)Tests unitaires Sql pour les lectures logiques

Ajouter "set statistics IO" au sql n'est pas difficile. Ce que je cherche est une procédure stockée où je l'envoie le DB et il renvoie une chaîne contenant les informations lues logiques au sujet du sql. Je travaille dans Sybase, mais si vous connaissez des proc/etc stockés qui le font dans une autre base de données, ce serait encore une aide énorme.

Merci!

Répondre

1

Cela n'est pas possible avec une procédure TSQL, mais la sortie peut être capturée dans .net en souscrivant à l'événement InfoMessage sur l'objet SqlConnection.

... 
    using (var connection = new SqlConnection("connectionstring") 
    using (var command = new SqlCommand("SET STATISTICS IO ON")) 
    { 
     connection.Open(); 
     connection.InfoMessage += OnInfoMessage; 

     using (var reader = command.ExecuteReader()) 
     { 
      .... 
     } 
    } 
    ... 

    private static void OnInfoMessage(object sender, SqlInfoMessageEventArgs args) 
    { 
     foreach (SqlError err in args.Errors) 
     { 
      Console.WriteLine(err.Message); 
     } 
    }