全部。我在嘗試{}塊後保留了以下片段。它的目的是提供調試信息,無論何時配置回數據庫...它很好地調試(不是所有它應該調試,但足以找到確切的錯誤,但是..在C#中調試db相關方法的更好的錯誤處理程序代碼?
代碼聞起來,即使我。能得到它你有錯誤處理的數據庫方法更好的主意
這裏(我在上log4net的實施目前的工作)是代碼:
區域CatchExceptionsAdv5NoReturnAtAll
catch (NullReferenceException nre)
{
if (userObj == null)
{
userObj = new FB.User();
FB.User.GiveDefaultUser (ref userObj);
}
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; ";
userObj.Mc.MethodName += methodName + " ; ";
userObj.Mc.DebugMsg += nre.Message;
//
if (Providers.nsDbMeta.DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
//Providers.nsDbMeta.Providers.nsDbMeta.DbDebugger.WriteIf (userObj.Mc.Msg);
}
} //eof catch
catch (System.InvalidOperationException ioe) //comm -- occurs when no result set was found !!!
{
if (userObj == null)
{
userObj = new FB.User();
FB.User.GiveDefaultUser (ref userObj);
}
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; ";
userObj.Mc.MethodName += methodName + " ; ";
userObj.Mc.DebugMsg += ioe.Message;
//
if (Providers.nsDbMeta.DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
//Providers.nsDbMeta.Providers.nsDbMeta.DbDebugger.WriteIf (userObj.Mc.Msg);
}
} //eof catch (System.InvalidOperationException)
catch (System.IndexOutOfRangeException ioore) //comm -- occurs when no result set was found !!!
{
if (userObj == null)
{
userObj = new FB.User();
FB.User.GiveDefaultUser (ref userObj);
}
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; ";
userObj.Mc.MethodName += methodName + " ; ";
userObj.Mc.DebugMsg += ioore.Message;
//
if (Providers.nsDbMeta.DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
//Providers.nsDbMeta.Providers.nsDbMeta.DbDebugger.WriteIf (userObj.Mc.Msg);
}
} //eof catch (System.IndexOutOfRangeException)
catch (System.Data.SqlClient.SqlException sqle)
{
if (userObj == null)
{
userObj = new FB.User();
FB.User.GiveDefaultUser (ref userObj);
}
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; ";
userObj.Mc.MethodName += methodName + " ; ";
userObj.Mc.DebugMsg += sqle.Message;
//
if (Providers.nsDbMeta.DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
//Providers.nsDbMeta.Providers.nsDbMeta.DbDebugger.WriteIf (userObj.Mc.Msg);
}
} //eof catch
catch (System.FormatException fe)
{
if (userObj == null)
{
userObj = new FB.User();
FB.User.GiveDefaultUser (ref userObj);
}
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; ";
userObj.Mc.MethodName += methodName + " ; ";
userObj.Mc.DebugMsg += fe.Message;
//
if (Providers.nsDbMeta.DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
//Providers.nsDbMeta.Providers.nsDbMeta.DbDebugger.WriteIf (userObj.Mc.Msg);
}
} //eof catch
catch (Exception ex)
{
if (userObj == null)
{
userObj = new FB.User();
FB.User.GiveDefaultUser (ref userObj);
}
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; ";
userObj.Mc.MethodName += methodName + " ; ";
userObj.Mc.DebugMsg += ex.Message;
//
if (Providers.nsDbMeta.DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
//Providers.nsDbMeta.Providers.nsDbMeta.DbDebugger.WriteIf (userObj.Mc.Msg);
}
} //eof catch
#endregion CatchExceptionsAdv5NoReturnAtAll
它看起來像代碼重複了很多。那將是我會考慮重構的第一件事。 – mjallday 2009-05-06 02:13:40