我有一个.aspx页面调用.asmx页面的Web服务。在.net Web服务中,我尝试打开与SQLServer 2008的数据库连接。连接失败。我不知道为什么。我在try / catch中执行此操作,当我调试时,catch会被击中。虽然因为我无法访问服务器的文件系统来写日志文件,所以我不确定我能输出什么。
我找到了这个帖子:
try
{
SqlCommand cmd =
new SqlCommand("raiserror('Manual SQL exception', 16, 1)",DBConn);
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
string msg = ex.Message; // msg = "Manual SQL exception"
}
这里可能会对我有所帮助,但我不知道如何将msg字符串输出到调用此Web服务的页面?有没有办法通过让调用页面也实现相同的异常处理程序来将它传播到异常链中?
谢谢//:)
答案 0 :(得分:3)
您应该能够将SQL异常捕获为特定类型并阅读特定的错误消息:
try{
...
}
catch(SQLException sqlex)
{
/// do some work here with sqlex.Message
}
catch(Exception ex)
{
/// this will trap any other 'type' of exception incase a sqlex is not thrown.
}
然后你可以把它“扔到堆栈”,这意味着将它发送回调用失败代码的方法:
catch(SQLException sqlex)
{
throw sqlex;
}
或者你可以根据sql异常抛出一条新消息:
catch (SQLException sqlex)
{
throw new Exception("My method threw an exception in SQL:" + sqlex.Message);
}
所有这些方法都允许您将堆栈中的消息发送回调用SQL的客户端。这是你应该给你留言的地方。
答案 1 :(得分:1)
如果在web.config中设置以下内容,则异常详细信息将显示在浏览器中。
<customErrors mode="off" />
或者您可以尝试安装ELMAH,它很容易设置,并且可以配置为在内存中保留异常详细信息的日志。
答案 2 :(得分:1)
您可以为您的页面或应用程序启用跟踪,然后执行以下操作:
Trace.Write ("This is my exception:\n" + exception.ToString ());
然后转到http://yourhost/Trace.axd,您将能够看到输出。
答案 3 :(得分:1)
如果您可以访问调试器,也可以执行
Debug.WriteLine(ex.Message)
在你的捕获声明中。
这会将错误写入“输出”窗口。
答案 4 :(得分:0)
既然你说你可以调试,(假设你可以改变代码)为什么不做:
string strEx = Ex.ToString(); //Ex is the caught exception.
然后只需从Visual Studio IDE观察窗口/ Visualizer&amp;中复制strEx数据。然后使用数据。