我对C#很新。
当我尝试捕捉这样的东西时:
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch(SqlException ex)
{
MessageBox.Show("there was an issue!");
}
我如何知道Open
或ExecuteNonQuery
是否发生了问题?
如果我在non-SQL
中拨打了一堆其他Try
内容,该怎么办?
我怎么知道哪个失败了?
SqlException
对常规Exception
的意义是什么?
如果我在SqlException
块中有这样的代码,Try
如何处理非SQL相关的错误?
答案 0 :(得分:7)
您可以在try块
后添加多个捕获try
{
connection.Open();
command.ExecuteNonQuery();
}
catch(SqlException ex)
{
MessageBox.Show("there was an issue!");
}
catch(Exception ex)
{
MessageBox.Show("there was another issue!");
}
这里有一个重要的规则来捕捉更高级别的特定异常,以及更低级的一般异常
如果我在TRY中调用了一堆其他非SQL内容怎么办? 我怎么知道哪个失败了?
这将基于操作引发的异常。就像我说的那样,首先捕捉最具体的例外情况,然后在下降时更加通用。我建议您查看MSDN文档,了解您认为可能引发异常的方法。本文档详细说明了在何种情况下方法引发的异常。
SQLEXCEPTION对常规EXCEPTION的意义是什么?
SQLException
是普通Exception
类的扩展,仅在某些情况下才会抛出。
如果我在TRY块中有这样的代码,SQLEXCEPTION如何处理非SQL相关的错误?
因此,为了回答您的问题,您设置的块不会捕获任何非SQLException
或扩展SQLException
的异常。
答案 1 :(得分:3)
快速回答是你可以拥有许多catch()部分来捕捉特定的异常。
try{
}
catch (SqlException sqlEx)
{
//deal with sql error
}
catch (NullArgumentException)
{
//Deal with null argument
}//etc
finally
{
//do cleanup
}
你真正想要做的是把事情放在试图中,关注可能发生的特定异常。您还希望在边界代码周围使用try-catch块(您无法控制发生的情况)并优雅地处理您自己的错误。
答案 2 :(得分:3)
通过捕获SQL的异常
,您可以看到代码的哪一部分出现了异常try
{
connection.Open();
command.ExecuteNonQuery();
}
catch(SqlException ex) // This will catch all SQL exceptions
{
MessageBox.Show("Execute exception issue: "+ex.Message);
}
catch(InvalidOperationException ex) // This will catch SqlConnection Exception
{
MessageBox.Show("Connection Exception issue: "+ex.Message);
}
catch(Exception ex) // This will catch every Exception
{
MessageBox.Show("Exception Message: "+ex.Message); //Will catch all Exception and write the message of the Exception but I do not recommend this to use.
}
finally // don't forget to close your connection when exception occurs.
{
connection.Close();
}
InvalidOperationException异常:
根据MSDN:无法在未指定数据源或服务器的情况下打开连接。 要么 连接已经打开。
我不建议您将整个Exception message
写入UI,因为它更容易被黑客攻击SQL数据库
SqlException
:
只要SQL Server的.NET Framework数据提供程序遇到从服务器生成的错误,就会创建此类。 (客户端错误作为标准公共语言运行时异常抛出。)SqlException始终包含至少一个SqlError实例。
答案 3 :(得分:0)
您可以使用多个catch块来处理单个try块以处理不同的可能异常
如果对该异常使用异常和打印消息,则应用程序不会中断,但会显示已发生异常的消息。实际上每个catch块都会定义不同的异常,只有在您确定可能发生特定类型的异常时,才能编写特定异常的catch块。否则声明像catch(Exception ex)
这样的单个catch块,它将被捕获用于任何类型的异常并使用ex.toString()
消息跟踪错误。您还可以在try块中使用断点来获取导致异常的特定行。
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch (NullArgumentException ex)
{
//Deal with null argument
ex.toString();
}
catch (NumberFormatException ex)
{
//Deal with null argument
ex.toString();
}
catch(SqlException ex)
{
MessageBox.Show("there was an issue!");
}
catch(Exception ex)
{
MessageBox.Show(""+ex.toString());
}
由于
答案 4 :(得分:0)
要进一步确定问题,您可以使用以下语法:
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch(Exception ex)
{
MessageBox.Show("Error:" + ex.Message); // This will display all the error in your statement.
}
答案 5 :(得分:-3)