2016-07-12 5 views
-1

データアクセスレイヤーにexecutenonqueryメソッドがあります。 executenonqueryが失敗したときにビジネスロジックで例外を処理する必要があります。 BLLにElmah loggerを使用しています。 ExecuteNonQueryメソッドからの戻り値はありません、 はので、私はビジネスロジックでのsql例外の処理

BLLをスローされる例外のためにログインするためにBLLには何の条件を確認してください:

//コンストラクタ

public FormService(ISettings settings, ILogger logger, IFormDataServiceWorker formDataService) 
      : base(settings, logger) 
     { 
      this._formDataService = formDataService; 
     } 
     //method calling DAL 
     public string GetRefNo(FormData formData) 
     { 
       foreach (var formFieldData in formFieldDataList) 
       { 
        this._formDataService.SubmitFormData(formFieldData); 
       } 
} 

DALの実装:

public void SubmitFormData(FormFieldDTO formFieldData) 
     { 
      using (var sqlConn = new SqlConnection(Configuration.DBConnection)) 
      { 
       sqlConn.Open(); 
       using (var sqlcmd = new SqlCommand("usp_SubmissionDataInsert", sqlConn)) 
       { 
        sqlcmd.CommandType = CommandType.StoredProcedure; 
        sqlcmd.Parameters.Add("@SubmissionId", SqlDbType.UniqueIdentifier).Value = formFieldData.SubmissionId; 
        sqlcmd.Parameters.Add("@FieldId", SqlDbType.SmallInt).Value = formFieldData.FieldId; 
        sqlcmd.Parameters.Add("@FieldTitle", SqlDbType.VarChar, 500).Value = formFieldData.FieldTitle; 
        sqlcmd.Parameters.Add("@FieldData", SqlDbType.VarChar, -1).Value = formFieldData.FieldValue; 
        sqlcmd.Parameters.Add("@FieldName", SqlDbType.VarChar, 200).Value = formFieldData.FieldName; 

        sqlcmd.ExecuteNonQuery(); 
       } 
      } 
     } 

答えて

1

ビジネスレイヤーでこの例外をキャッチする場合は、try/catchおよび特殊な例外を使用できます。このような何か:

public class MyDatabaseLevelException : Exception 

と任意のAdo.net例外が発生したときに、あなたのDALの実装では、この例外タイプを投げます。

throw new MyDatabaseLevelException("message", inner); 

だからあなたBLLにあなたがこのタイプの例外をキャッチすることができます:

public string GetRefNo(FormData formData) 
{ 
    foreach (var formFieldData in formFieldDataList) 
    { 
     try 
     { 
      this._formDataService.SubmitFormData(formFieldData); 
     } 
     catch (MyDatabaseLevelException exception) 
     { 
      //log or do something with this. 
     } 
    } 
} 

は、私はデータベースレベルの例外は、データベース・レイヤー(DAL)にログオンする必要があることだと思う、と述べました。したがって、あなたの場合は、ExecuteNonQuery例外をSubmitFormDataメソッドに記録することが最も適切な方法です。ビジネス層はデータベースの問題をどのように扱うべきかを知るべきではありません。