C#SqlDataReader执行统计信息

时间:2010-01-21 09:17:22

标签: c# sql-server-2005 statistics sqldatareader sqlcommand

我正在创建一个自动数据库查询执行队列,这实际上意味着我正在创建一个逐个执行的SQL查询队列。

使用类似于以下内容的代码执行查询:

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString))
{
  cn.Open();
  using (SqlCommand cmd = new SqlCommand("SP", cn))
  {
    cmd.CommandType = CommandType.StoredProcedure;
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
      while (dr.Read())
      {

      }
    }
  }
}

我想做的是尽可能多地收集有关执行的信息。 花了多长时间。受影响的行数。

最重要的是,如果失败,为什么失败。

我真的可以获得有关我希望能够保存的执行的任何信息。

2 个答案:

答案 0 :(得分:7)

尝试将内置统计信息用于执行时间和选定/受影响的行:

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString))
{
  cn.Open();
  cn.StatisticsEnabled = true;
  using (SqlCommand cmd = new SqlCommand("SP", cn))
  {
    cmd.CommandType = CommandType.StoredProcedure;
    try
    {
      using (SqlDataReader dr = cmd.ExecuteReader())
      {
        while (dr.Read())
        {

        }
      }
    }
    catch (SqlException ex)
    {
      // Inspect the "ex" exception thrown here
    }
  }

  IDictionary stats = cn.RetrieveStatistics();
  long selectRows = (long)stats["SelectRows"];
  long executionTime = (long)stats["ExecutionTime"];
}

有关MSDN的更多信息,请参阅

我能看到你发现事情失败的唯一方法就是检查投掷的SqlException并查看细节。

答案 1 :(得分:1)

虽然我有点不确定你的问题究竟是什么,但我的意思是你想要一个可以用来保存或如何获得你上面提到的统计数据的统计列表。

SqlDataReader具有属性.RecordsAffected.FieldCount,可以告诉您一些有关返回数据的信息。

您还可以抓住SqlException以找出有关哪些(如果有)出错的信息。

相关问题