C# 控制台的标准sql错误消息太模糊
在c#winforms应用程序中,有没有一种方法可以让控制台显示的异常消息更精确一点。例如,而不是仅仅C# 控制台的标准sql错误消息太模糊,c#,sql-server,winforms,C#,Sql Server,Winforms,在c#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.throwSqlExcep
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
...
至少我对可能的错误有了一个想法。我确信这种情况是有原因的,但我不知道:)额外的信息基本上是
.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
SQLException已包含足够的信息 请查看MSDN页面 ()
试试看
{
command.Connection.Open();
command.ExecuteNonQuery();
}
catch(SqlException-ex)
{
对于(int i=0;i
是的,当然是:
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块的情况,您可以求助于全局处理程序:对于UI消息泵线程和非UI线程。注意,“第一次机会异常”与看到实际异常并不完全相同;你在IDE中看到了吗?或者在IDE的输出窗口中的
catch
块中,IDE的输出窗口(esp re first chance exception)与控制台输出不同;你几乎可以忽略这一点——这不是真的;这是一个“头脑清醒”的东西,可能会或可能不会泡沫起来以后(vs正在处理)。它没有显示太多的原因是(因为它不是真实的)它不能冒险做任何可能改变状态的事情,包括访问任何成员(包括。Message
等;属性是方法)。它唯一能安全显示的是类型信息。你在比较苹果和砖头。
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);
}
}