6

自動化された DB クエリ実行キューを作成しています。これは基本的に、1 つずつ実行される 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())
      {

      }
    }
  }
}

私がやりたいことは、実行についてできるだけ多くの情報を収集することです。かかった時間。影響を受けた行数。

最も重要なのは、失敗した場合、失敗した理由です。

本当に保存したい実行について取得できるあらゆる種類の情報。

4

2 に答える 2

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スローされたものを調べて詳細を確認することです。

于 2010-01-21T09:33:02.600 に答える
1

あなたの質問が実際に何であるかは少しわかりませんが、それは、保存するのに役立つ可能性のある統計のリストが必要な場合、または上記の統計を取得する方法を意味します.

SqlDataReader にはプロパティが.RecordsAffectedあり.FieldCount、返されたデータの量が少しわかります。

また、 をキャッチして、SqlException何が (もしあれば) 問題が発生したかについての情報を見つけることもできます。

于 2010-01-21T09:31:00.490 に答える