2009-12-10 120 views
1

我們有數據訪問層的單元測試。這有助於發現sql語法錯誤。
現在我們已經有了這些測試,我想進一步推進。我想運行單元測試,並找到具有大量邏輯讀取的SQL(自動)(找到需要調整的sql)邏輯讀取的單元測試Sql

將「set statistics IO」添加到sql並不困難。我正在尋找的是一個存儲過程,我將它發送給數據庫,並返回一個包含有關sql的邏輯讀取信息的字符串。我在Sybase工作,但如果你知道存儲過程/ etc在不同的數據庫中執行此操作,那仍然是一個巨大的幫助。

謝謝!

回答

1

這對於TSQL過程來說是不可能的,但通過訂閱SqlConnection對象上的InfoMessage事件,可以在.net中捕獲輸出。

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