2016-07-13 12 views
-1

以下は、UI、BLLおよびDALのコードです。 DLL のexecutenonqueryに問題がある場合、BLLは例外を処理し、ユーザに一般的なメッセージを表示する必要があります。私たちはエラー処理のためにElmahを使用しています。誰も例外を処理し、一般的なメッセージページ(エラー500など)をユーザに表示する方法を提案してください。elmahによる例外処理

コントローラ

refNo = _formServiceWorker.SubmitFormData(formData, isFinalized); 

ビジネスロジック層:あなたは完全なコードをラップ(または単にsqlcmd.ExecuteNonQueryする必要があります

public SubmissionHeaderDTO GetRefNo(SubmissionHeaderVariablesDTO requestVariables) 
{ 
    using(var sqlConn = new SqlConnection(Configuration.DBConnection)) 
    { 
     sqlConn.Open();     
     using (var sqlcmd = new SqlCommand("usp_testSubmissionHeaderInsert", sqlConn)) 
     { 
      sqlcmd.CommandType = CommandType.StoredProcedure; 
      sqlcmd.Parameters.Add("@FormId", SqlDbType.UniqueIdentifier).Value = requestVariables.FormId; 

      SqlParameter outputSubmissionSequence = new SqlParameter("@SubmitSequence", SqlDbType.NVarChar, 30) 
      { 
       Direction = ParameterDirection.Output 
      }; 

      SqlParameter outputFormGuid = new SqlParameter("@FormIdGuid", SqlDbType.UniqueIdentifier) 
      { 
       Direction = ParameterDirection.Output 
      }; 

      sqlcmd.Parameters.Add(outputSubmissionSequence); 
      sqlcmd.Parameters.Add(outputFormGuid); 

      sqlcmd.ExecuteNonQuery(); 

      var submissionHeaderDto = new SubmissionHeaderDTO() 
      { 
       SubmissionId = (Guid)outputSubmissionId.Value, 
       SubmitSequence = outputSubmissionSequence.Value.ToString(), 
       FormId = (Guid)outputFormGuid.Value 
      }; 
      return submissionHeaderDto; 
     } 
    } 
} 

答えて

0

public string SubmitFormData(GenericFormData formData, bool isFinalized) 
{    
     var submissionHeaderDTO = new SubmissionHeaderDTO(); 
     submissionHeaderDTO = SubmissionHeader(formData.FormId, submissionHeaderVariablesDTO); 

     var formFieldDataList = GetFormFieldData(formData, submissionHeaderDTO); 

     if (formFieldDataList.Count() > 0) 
     {      
      this._formDataService.DeleteFormData(submissionHeaderDTO.SubmissionId); // calls Data Access Layer 

      foreach (var formField in formFieldDataList) 
      {       
        this._formDataService.SubmitFormData(formField); //Calls Data Access Layer 
      } 
     } 
    } 
    return submissionHeaderDTO.SubmitSequence; 
} 

データアクセス層()あなたの必要性に応じて行)をtry-catchブロックでデータアクセスレイヤーに追加し、カスタム例外をスローします(例:カスタムDataAccessLayerException例外クラス)。その後、コントローラコードで、try-catchブロックを追加し、データアクセスレイヤーからスローされたカスタム例外を処理し、エラー500のような一般的なメッセージページをユーザーに表示します。

0

あなたはすでにこれを解決していると思いますが、将来的にはこの問題の解決策があると思います。実際にデータアクセスレイヤーコードをtry catchでラップして、内部例外として元の例外を含むカスタム例外をスローすることができます。例外をWebフレームワークに流して、それを処理させることもできます。

あなたがしてはいけないこと(imo)は、すべてのウェブサイトコードでdbエラーを処理し、エラーページやsimiarにリダイレクトするようなカスタムを実行することです。それはカスタムエラーページのためのものです。非常に複雑なテーマですが、それを設定するための良い文書があります。私が見つけた最高のものはDemystifying ASP.NET MVC 5 Error Pages and Error Loggingです。 ELMAHも使用しているので、カスタムエラーページとELMAHの設定が競合することに注意する必要があります。これは、カスタムエラーページがキャッチされていない例外を「取り除く」ためです。幸いにも、これを修正する方法があります。 ELMAH and custom errors(私が書いた投稿)をチェックしてください。