2011-07-05 21 views
1

私のASP.NETのウェブサイトのためのVisual Studio 2010を使用している間、我々はストアドプロシージャ呼び出しのためのコードを持っている:デバッグのためにストアドプロシージャ呼び出しを取得できますか?

SqlDataAccess sqlDataAccess = new SqlDataAccess(); 

SqlParameter[] parameters = 
{ 
    new SqlParameter("@R", rptType.Replace("'", "''")), 
    new SqlParameter("@M", hybrDct["mod"].ToString().Replace("'", "''")), 
    new SqlParameter("@C", hybrDct["CG"].ToString().Replace("'", "''")), 
    new SqlParameter("@Ts$", hybrDct["TFields"].ToString().Replace("'", "''")), 
}; 

sqlDataAccess.ProcName = "MyStoredProc"; 
sqlDataAccess.Parameters = parameters; 

は、デバッグの代わりに、個々のSqlParameterを見つけるためにプリントアウト実行を取得することが可能であり、それを個別に入力しますか?

ありがとうございました。

答えて

1

私は次のようなものを使用します。すべてがこれを通り、ログに記録されます。

/// <summary> 
/// Executes a stored procedure with no return. 
/// </summary> 
/// <returns>The number of records affected by stored proc.</returns> 
public static int ExecuteStoredProc(string storedProcName, params SqlParameter[] parameters) 
{   
    StringBuilder callDefinition = new StringBuilder(); 
    callDefinition.Append(string.Format("ExecuteStoredProc: {0} (", storedProcName)); 
    for (int i = 0; i < parameters.Count(); i++) 
    { 
     callDefinition.Append(string.Format("{0}={1}", parameters[i].ParameterName, parameters[i].Value)); 
     if (i < parameters.Count - 1) 
     { 
      callDefinition.Append(","); 
     } 
    } 
    callDefinition.Append(")"; 
    log.Debug(callDefinition.ToString()); 
    using (var ctx = ConnectionManager<SqlConnection>.GetManager(ConnectionProfile.ConnectionName)) 
    { 
     using (SqlCommand command = new SqlCommand(storedProcName, ctx.Connection)) 
     { 
      command.CommandType = System.Data.CommandType.StoredProcedure; 
      command.CommandTimeout = 1000; 
      foreach (SqlParameter parameter in parameters) 
      { 
       command.Parameters.Add(parameter); 
       //log your param here 
      } 

      return command.ExecuteNonQuery(); 
     } 
    } 
} 

/// <summary> 
/// Executes a query and returns a dataset 
/// </summary> 
public static DataSet ExecuteQueryReturnDataSet(string query, params SqlParameter[] parameters) 
{ 
    try 
    { 
     //implement the parameter logging here as in the above code sample as well 

     log.Debug("Executing ExecuteQueryReturnDataSet() calling query " + query); 
     using (var ctx = ConnectionManager<SqlConnection>.GetManager(ConnectionProfile.ConnectionName)) 
     { 
      using (SqlCommand command = new SqlCommand(query, ctx.Connection)) 
      { 
       command.CommandType = System.Data.CommandType.Text; 
       command.CommandTimeout = 1000; 
       foreach (SqlParameter parameter in parameters) 
       { 
        command.Parameters.Add(parameter); 
       } 
       using (SqlDataAdapter adapter = new SqlDataAdapter(command)) 
       { 
        DataSet dataSet = new DataSet(); 
        adapter.Fill(dataSet); 
        return dataSet; 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     log.Error(ex); 
     throw; 
    } 
} 
+0

あなたは 'SqlComman.Parameters.AddRange(SqlParameter [])' – abatishchev

+0

感謝を使用することができます - あなたは任意の特定の値のためにそこにあなたの伐採、DBNullですチェックなどをしたいいけない提供。 –

+0

編集した内容 –

1

私は通常、これがデータベースであると仮定してSQL Server Profilerを実行し、ログから完全なクエリをコピーできます。

0

残念ながら、SqlClient(SqlDataAccessを実装するために使用していると仮定していますが、これは自分のデータアクセス層と見なします)は、SQL Serverに送信されるコマンドを直接公開しません。私がデータアクセスレイヤー内で通常行うことは、すべてのコマンドをクエリウィンドウで実行できる形式で記録することです。

関連する問題