我想检查服务器是否无法访问,如果无法访问,我想在我的登录页面上打印友好消息。就像当用户输入其凭证时和我得到的异常
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)
这个例外。那么我应该怎样在发生哪个异常时才能显示消息呢?
答案 0 :(得分:22)
我知道这是一篇较旧的帖子,但是如果您要以相同的方式处理所有异常和/或使用错误报告或类似的信息(而不是通知用户的具体信息),您可以使用以下
try
{
//do something here
}
catch(Exception ex)
{
MessageBox.Show(ex.GetType().ToString()); //will print System.NullReferenceException for example
}
答案 1 :(得分:13)
您需要在代码时知道期望的异常,以便相应地捕获它们。正如Dimitrov所说,当与SQL服务器的连接失败时会抛出SQLException,因此特别注意这是一个很好的策略。
您希望按顺序捕获各种异常,如下所示:
try
{
//some code
}
catch(TypeOfException exOne)
{
//handle TypeOfException someway
}
catch (OtherTypeOfException exTwo)
{
//handle OtherTypeOfException some other way
}
catch (Exception ex)
{
//handle unknown exceptions in a general way
}
finally
{
//any required cleanup code goes here
}
尝试将最不寻常的例外放在最顶层,沿着列表向更常见的方向发展。 catch顺序是顺序的 - 如果你把catch(Exception)放在顶部,无论你在它下面编码什么例外,它总是会捕获该行。
答案 2 :(得分:7)
您可以尝试抓住SQLException:
try
{
// Try sending a sample SQL query
}
catch (SQLException ex)
{
// Print error message
}
答案 3 :(得分:6)
你可以使用你用来检查父类是否是类型子类的相同方法,这是使用
完成的 obj is NotImplementedException
其中obj的类型为Exception,是所有异常的父类。
或者如果您想稍后使用异常对象,则可以使用:
var niException=obj as NotImplementedException
if(niException==null) //will be null when object is not of type NotImplementedException
return;
当你有一个用于处理异常的集中式类并且不想添加多个catch语句时,这个逻辑特别有用
希望这有帮助。
答案 4 :(得分:2)
try {
//some code } catch(TypeOfException exOne) {
//handle TypeOfException someway } catch (OtherTypeOfException exTwo) {
//handle OtherTypeOfException some other way } catch (Exception ex) {
//handle unknown exceptions in a general way } finally {
//any required cleanup code goes here }
try/finally
和using
几乎相同。 using
将尝试对该对象执行某些操作,无论是否成功,它都会处置该对象以阻止内存泄漏,但不会忽略阻止代码继续运行的错误。
Try
将尝试在大括号内执行代码,如果发生错误,它将忽略错误并退出Try
子句,然后继续读取代码,除非错误是关键的,导致崩溃的程序。但是当using
流时它不会确保流被关闭/处置,因为当发生错误时它退出try
子句,然后到达你可能在底部添加的任何代码进行处理(坏习惯imo) )。
Try
代码需要Catch
(s)和/或Finally
声明。 Catch
使您有机会处理异常,一般或特定异常。使用的一个例子是,生成错误的文本文件并保存。 using
不会让你处理异常。
using
的另一个示例可能是,您有播放列表,找不到歌曲,例外区域nullreferece
可能会从列表中删除该项目。
Finally
,即使错误很严重且程序崩溃,finally
子句中的代码也会被执行,流对象就是你应该放置你的配置代码的地方,如果对象在try
子句中失败,则它总是被处理掉。
希望我帮助提出一些关于使用和try
/ catch
/ finally
的清晰度。
答案 5 :(得分:0)
你必须抓住例外:
try
{
//Contact the server
}
catch(YourCouldNotContactServerException)
{
//Show some friendly message
}
答案 6 :(得分:0)
try
{
// Your code
}
catch (SQLException ex)
{
Response.Write(ex.Message);//for web apps
Console.WriteLine(ex.Message);//for windows apps
}
答案 7 :(得分:-1)
我认为,解决方案是......
catch(Exception ex) {Response.Write(“发生错误:”+ ex.Message); }