1

有没有办法在 ac#winforms 应用程序中使异常消息的控制台显示更精确一点。如,而不仅仅是;

A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

也许更像java的,

java.sql.SQLException: Closed Connection at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at
...

至少所以我知道什么可能是错的。我确信这种情况有一些东西,但不知道:)

4

3 回答 3

2

那额外的信息基本上就是.StackTrace。它的精确程度取决于它的构建方式、pdb 是否可用等

如果您只是执行以下操作:

catch(Exception ex) {
    Console.Error.WriteLine(ex);
}

默认情况下,您应该会看到类似级别的信息。基本上,ToString()节目不仅仅是.Message. 例如:

static void Main()
{
    try {Throw();}
    catch(Exception ex) {
        Console.Error.WriteLine(ex);
    }
}
public static void Throw()
{
    throw new InvalidOperationException("oops");
}

显示:

System.InvalidOperationException: oops
   at X.Throw() in c:\Users\Marc\Documents\Visual Studio 2012\Projects\ConsoleAp
plication1\ConsoleApplication1\Program.cs:line 30
   at X.Main() in c:\Users\Marc\Documents\Visual Studio 2012\Projects\ConsoleApp
lication1\ConsoleApplication1\Program.cs:line 20
于 2013-03-11T08:28:04.040 回答
0

SQLException 已经包含足够的信息

请查看 MSDN 页面(http://msdn.microsoft.com/it-it/library/system.data.sqlclient.sqlexception.aspx

 try
        {
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                errorMessages.Append("Index #" + i + "\n" +
                    "Message: " + ex.Errors[i].Message + "\n" +
                    "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                    "Source: " + ex.Errors[i].Source + "\n" +
                    "Procedure: " + ex.Errors[i].Procedure + "\n");
            }
            Console.WriteLine(errorMessages.ToString());
        }
于 2013-03-11T08:28:31.560 回答
0

是的,当然是:

try
{
  /// your code goes here ...
}
catch(SqlException sex)
{
 foreach(SqlError error in sex)
 {
   Console.WriteLine("{0}:{1} Error {2} State {3}: \"{4}\" at {5}@{6}", 
     error.Server, error.Source,
     error.Number, error.State,
     error.Message,
     error.Procedure, error.LineNumber);
 }
}

你说对了?try…… catch

对于没有 try/catch 块有效的(少数)情况,您可以求助于全局处理程序:Application.UnhandledException对于 UI 消息泵线程和AppDomain.UnhandledException非 UI 线程。

于 2013-03-11T08:31:17.810 回答