C# 处理业务逻辑中的sql异常
我在数据访问层有ExecuteOnQuery方法。当ExecuteOnQuery失败时,我需要处理业务逻辑中的异常。 我在BLL中使用Elmah logger。ExecuteOnQuery方法没有返回值, 那么,我应该在BLL中检查什么条件来记录抛出的任何异常呢 BLL: //建造师C# 处理业务逻辑中的sql异常,c#,model-view-controller,elmah,C#,Model View Controller,Elmah,我在数据访问层有ExecuteOnQuery方法。当ExecuteOnQuery失败时,我需要处理业务逻辑中的异常。 我在BLL中使用Elmah logger。ExecuteOnQuery方法没有返回值, 那么,我应该在BLL中检查什么条件来记录抛出的任何异常呢 BLL: //建造师 public FormService(ISettings settings, ILogger logger, IFormDataServiceWorker formDataService)
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();
}
}
}
如果您想在业务层捕获此异常,可以使用try/catch和专门的异常。大概是这样的:
public class MyDatabaseLevelException : Exception
在DAL实现中,当发生Ado.net异常时,会抛出此异常类型
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)上。因此,在您的情况下,实现这一点最合适的方法是在SubmitFormData
方法中记录ExecuteNonQuery
异常。业务层不应该知道如何处理数据库问题