2

我有一个 .aspx 页面调用 .asmx 页面的 Web 服务。在那个 .net Web 服务中,我尝试打开与 SQLServer 2008 的数据库连接。连接失败。我不确定为什么。我在 try/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"
}

在这里,它可能对我有用,但我不知道如何将味精字符串输出到调用此 Web 服务的页面?有没有办法通过让调用页面也实现相同的异常处理程序来将其传播到异常链上?

谢谢 // :)

4

5 回答 5

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 的客户端。这是您应该呈现消息的地方。

于 2009-12-12T07:11:01.430 回答
1

如果你可以访问调试器,你也可以做一个

Debug.WriteLine(ex.Message) 

在你的 catch 语句中。

这会将错误写入输出窗口。

于 2009-12-12T07:45:00.770 回答
1

如果您在 web.config 中设置以下内容,则异常详细信息将显示在浏览器中。

<customErrors mode="off" />

或者您可以尝试安装ELMAH,它很容易设置,并且可以配置为在内存中保留异常详细信息的日志。

于 2009-12-12T07:09:37.947 回答
1

您可以为您的页面或应用程序启用跟踪,然后执行以下操作:

Trace.Write ("This is my exception:\n" + exception.ToString ());

然后转到http://yourhost/Trace.axd,您将能够看到输出。

于 2009-12-12T07:10:01.790 回答
0

既然你说你可以调试,(假设你可以更改代码)为什么不做:

string strEx = Ex.ToString(); //Ex is the caught exception.

然后只需从 Visual Studio IDE 监视窗口/Visualizer 复制 strEx 数据,然后使用该数据。

于 2009-12-12T07:11:30.050 回答