单元测试Sql进行逻辑读取

时间:2009-12-10 14:50:55

标签: .net sql unit-testing logical-reads

我们的数据访问层有单元测试。这有助于发现sql语法错误 现在我们已经进行了这些测试,我想更进一步。我想运行单元测试并找到具有大量逻辑读取的sql,自动。(找到需要调优的sql)

在sql中添加“set statistics IO”并不困难。我正在寻找的是一个存储过程,我发送它的数据库,它返回一个字符串,其中包含有关sql的逻辑读取信息。我在Sybase工作,但如果你知道在不同的数据库中执行此操作的存储proc / etc,那将仍然是一个巨大的帮助。

谢谢!

1 个答案:

答案 0 :(得分: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);
      }
  }