我有下面的代码,我现在需要弄清楚如何不仅显示,而且还将其全部通过电子邮件发送到我的电子邮件,这样,如果任何用户遇到错误,我们就会看到它到底是什么。
Catch ex As Exception
lblInformation.Text = ("<h4>Unable to save data in database</h4>" + vbNewLine + "The error was '" + ex.Message + "'" + vbNewLine + vbNewLine + "The SQL Command which falied was:" + vbNewLine + "<strong>" + mySQL + "</strong>" + vbNewLine + "Please contact the Service Desk to report this error.").Replace(vbNewLine, "<br />" + vbNewLine)
booInsertedRecord = False
Finally
myConnection.Close()
End Try
我试过插入
SmtpMail.Send(objEMail)
在“booInsertedRecord = False”之上的新行中然后创建一个新的“Dim objEMail New MailMessage()”然后意识到这将无法工作,因为它的msg是在catch中定义的,所以不确定旁边的步骤是什么取。
我使用VB已经有一段时间了,我不需要使用这样的东西,所以任何帮助都会非常感激。
编辑 - @tzup ToString()显示
[The error was 'System.Data.SqlClient.SqlException: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
The statement has been terminated.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at ASP.bulletinform_aspx.Upload_Click(Object source, EventArgs e) in E:\Bulletin\Bulletin\Bulletin\BulletinForm.aspx:line 415']
如果我有空格,会把它放在评论中,第415行是myUpdate.ExecuteNonQuery()
答案 0 :(得分:2)
使用log4net之类的记录器并设置SmtpAppender。
http://www.dotnetspider.com/resources/20210-Send-Exceptions-or-Error-Email-using-Log-Net.aspx
答案 1 :(得分:2)
很久以前Jeff Atwood创建了一个用户友好异常处理程序。我用它:) http://www.codinghorror.com/blog/2004/06/user-friendly-exception-handling.html
它允许您通过电子邮件发送错误,甚至包括异常时PC的屏幕截图。
答案 2 :(得分:1)
在catch块中创建电子邮件对象,例如将内容设置为lblInformation.Text,然后发送它。
那应该有用。
为电子邮件发送功能创建静态类,静态函数将字符串作为参数。在util程序集中定义此类,在项目中引用此程序集,然后在catch语句中需要时调用它(如果您愿意)。
你的课程可能是: EmailUtil.SendMail(string msg);
然后你的SendMail函数从配置(smtp服务器,登录等)读入一些参数,然后发送电子邮件。
除此之外,log4net非常擅长处理这种情况,一旦你正确配置它(在我看来不是一个非常陡峭的学习曲线)
祝你好运!修改强>
以下是使用 TryParse
进行数据验证的示例string someTextVal = "3";
string someDateVal = "14.02.2011";
int i;
if (!int.TryParse(someTextVal, out i))
{
throw new Exception("Error trying to convert value=" + someTextVal + " to an int");
}
// Now i holds a validated integer
DateTime dt;
if (!DateTime.TryParse(someDateVal, out dt))
{
throw new Exception("Error trying to convert value=" + someDateVal + " to a datetime");
}
// Now dt holds a validated date
注意日期时间验证可能需要一些柚木,具体取决于输入的呈现方式
LATER EDIT 如果有人需要在VB中转换我的C#代码(因为问题是用VB标记的),这里有一个指向在线转换器的链接:Convert C# to VB.NET
答案 3 :(得分:1)
通常有一些记录系统可以做到这一点,所以你不要重新发明轮子,也不要在代码中的catch块中加入任何逻辑。
您可以查看Log4Net以及Microsoft Logging Enterprise Libraries,我个人更喜欢并使用Log4Net,在您的catch块中,您只需使用类似Logger.LogError(异常)的内容,具体取决于您在app中如何配置它。配置您获取数据库和/或事件日志和/或通过电子邮件和/或文本文件记录的所有内容以及更多内容。