.net 对Sql进行逻辑读取的单元测试

.net 对Sql进行逻辑读取的单元测试,.net,sql,unit-testing,logical-reads,.net,Sql,Unit Testing,Logical Reads,我们对数据访问层进行了单元测试。这有助于发现sql语法错误。 现在我们有了这些测试,我想再进一步。我希望运行单元测试并自动查找具有大量逻辑读取的sql。(查找需要调优的sql) 将“设置统计IO”添加到sql并不困难。我要寻找的是一个存储过程,我将其发送到db,它返回一个字符串,其中包含有关sql的逻辑读取信息。我在Sybase工作,但如果您知道Storage proc/etc在另一个数据库中执行此操作,那将仍然是一个巨大的帮助 谢谢 这在TSQL过程中是不可能的,但是可以通过订阅SqlConn

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

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


谢谢

这在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);
      }
  }

这在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);
      }
  }