Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制台的标准sql错误消息太模糊_C#_Sql Server_Winforms - Fatal编程技术网

C# 控制台的标准sql错误消息太模糊

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

在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.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);
 }
}