C#SqlDataReader执行统计信息

我正在创建一个自动数据库查询执行队列,这实际上意味着我正在创建一个逐个执行的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()) { } } } } 

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

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

实际上我可以获得关于我希望能够保存的执行的任何信息。

尝试使用内置统计信息来执行时间和选择/受影响的行:

 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并查看详细信息。

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

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

您还可以捕获SqlException以查找有关哪些(如果有)出错的一些信息。