SqlExection异常捕获

网字 2015-12-05 07:54:05
写了个静态方法,用来执行Sql语句

public static bool SqlUpdate(string str_update){
conn.Open();
try{
SqlCommand cmd = new SqlCommand(str_update,conn)
if(cmd.ExecuteNonQuery() == 1) return true;
else return false;
}
catch (SqlExection e){
return false;
}
}
//在button_click()方法中引用的时候,有没有什么办法获取到SqlExection返回值。
protected void button_click(object sender, EventArgs e){
string strUpdate = @"update Main set name='刘明',sex='男'";
if(SqlUpdate(strUpdate)) labMessage.Text = “联系人信息修改成功”;
}

如上代码,我想在button的click事件中,捕获到SqlExection异常,这样在非调试模式下,也能知道问题出在哪里。总感觉要在方法外捕获方法中的错误,除非在方法中,将错误传出,否则应该是捕捉不到的。所以我试过将方法定义成返回值为string,然后在catch语句块中return e.ToString(),是可以解决这个问题的,但不知道这样的定义,是不是不太好。

catch (SqlExection e){
return e.ToString();
}
...全文
205 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2015-12-07
  • 打赏
  • 举报
回复
catch 会接受内部的异常。 所以,你的内部方法可以不用 try catch,让内部方法直接抛出 exception。这样外部方法的catch就会获取到了
小K的大师兄 2015-12-07
  • 打赏
  • 举报
回复
引用 7 楼 wangxiaoyu_net 的回复:
[quote=引用 5 楼 huangcailian 的回复:] public static bool SqlUpdate(string str_update){ conn.Open(); SqlCommand cmd = new SqlCommand(str_update,conn) if(cmd.ExecuteNonQuery() == 1) return true; else return false; } protected void button_click(object sender, EventArgs e) { try { string strUpdate = @"update Main set name='刘明',sex='男'"; if(SqlUpdate(strUpdate)) labMessage.Text = “联系人信息修改成功”; } catcth(Exception e) { e.message } }
如上代码SqlUpdate()中,我看你已经去掉了try-catch语句,我之前一直以为,如果在SqlUpdate()中不加try-catch语句,那么即便是在button_click()用catch去捕获,也捕获不到,因为等不及程序执行到button_clikc()中的catch语块段就出错了。但我刚才按你所改的代码试了试,居然能捕获错误,由此证明了我之前的理解是不正确的。 藉由此,顺便了解了一下throw与throw ex的不同。有一些细微区别,当然,这些细微区别的前提条件是,在SqlUpdate()方法中加入try-catch语句块,不建议在SqlUpdate()中使用throw ex,可以使用throw。具体区别请见此贴: http://www.cnblogs.com/JerryTian/archive/2012/09/24/2699459.html [/quote] 这个说明对基础理解不深 建议还是多看看书吧
网字 2015-12-06
  • 打赏
  • 举报
回复
@skyandcode: 谢谢你的回贴,在我的这个项目中,catch语句块后面没有代码了,所以之前根本就没考虑过catch之后的事。在我理解中,一旦catch到异常,表示程序运行中断了。从你的回复中理解到,不完全是这样,之所以设置异常捕捉,应该说目的之一就是为了确保程序的合理运行,或者说交给调用者决定如何运行。 我想我贴的代码,仅仅的是catch到异常,然后终止运行。在后续的代码中,可能要用到catch的另外两种处理方式了。 顺便问一下,你说的重新包装异常抛出,是不是指throw new Exception() ?
skyandcode 2015-12-06
  • 打赏
  • 举报
回复
你帖子贴的代码是最不应该的。没有处理异常,也不抛出,随便return false 相当于吃掉异常。如果你是类库开发者,这种代码最不应该出现。 catch到异常后,通常有3种处理方式: 1. 处理异常,并让线程从catch底部退出,也就是不执行后面的代码。 这有点类似你上面的方式,不过关键在于处理异常,例如进行了日志记录,状态恢复等。 2.重新包装异常抛出,catch块后面的代码进行执行,由调用者决定如何处理。 为了符合特殊场景,也许我们会重新包装一个自定义异常,并重新抛出。 3.继续抛出异常,catch块后面的代码会继续执行,由调用者决定如何处理。 需要注意的是,这里我们通常也会处理异常,不然是没有任何意义的。 例如上面有人提到的: try{ //一些操作 } catch{ throw; } 或者 try{ //一些操作 }catch(SomeException ex){ throw ex; } 两种写法是一样的,原封不动地往上抛,这样StackTrace信息才不会被错误地修改。但是,ctach里没有其它处理的话,和你不写 try-catch是一样的! 另外,catch异常,表示你预测到该异常的发生,并知道如何处理它。
引用 7 楼 wangxiaoyu_net 的回复:
[quote=引用 5 楼 huangcailian 的回复:] public static bool SqlUpdate(string str_update){ conn.Open(); SqlCommand cmd = new SqlCommand(str_update,conn) if(cmd.ExecuteNonQuery() == 1) return true; else return false; } protected void button_click(object sender, EventArgs e) { try { string strUpdate = @"update Main set name='刘明',sex='男'"; if(SqlUpdate(strUpdate)) labMessage.Text = “联系人信息修改成功”; } catcth(Exception e) { e.message } }
如上代码SqlUpdate()中,我看你已经去掉了try-catch语句,我之前一直以为,如果在SqlUpdate()中不加try-catch语句,那么即便是在button_click()用catch去捕获,也捕获不到,因为等不及程序执行到button_clikc()中的catch语块段就出错了。但我刚才按你所改的代码试了试,居然能捕获错误,由此证明了我之前的理解是不正确的。 藉由此,顺便了解了一下throw与throw ex的不同。有一些细微区别,当然,这些细微区别的前提条件是,在SqlUpdate()方法中加入try-catch语句块,不建议在SqlUpdate()中使用throw ex,可以使用throw。具体区别请见此贴: http://www.cnblogs.com/JerryTian/archive/2012/09/24/2699459.html [/quote]
网字 2015-12-05
  • 打赏
  • 举报
回复
引用 5 楼 huangcailian 的回复:
public static bool SqlUpdate(string str_update){ conn.Open(); SqlCommand cmd = new SqlCommand(str_update,conn) if(cmd.ExecuteNonQuery() == 1) return true; else return false; } protected void button_click(object sender, EventArgs e) { try { string strUpdate = @"update Main set name='刘明',sex='男'"; if(SqlUpdate(strUpdate)) labMessage.Text = “联系人信息修改成功”; } catcth(Exception e) { e.message } }
如上代码SqlUpdate()中,我看你已经去掉了try-catch语句,我之前一直以为,如果在SqlUpdate()中不加try-catch语句,那么即便是在button_click()用catch去捕获,也捕获不到,因为等不及程序执行到button_clikc()中的catch语块段就出错了。但我刚才按你所改的代码试了试,居然能捕获错误,由此证明了我之前的理解是不正确的。 藉由此,顺便了解了一下throw与throw ex的不同。有一些细微区别,当然,这些细微区别的前提条件是,在SqlUpdate()方法中加入try-catch语句块,不建议在SqlUpdate()中使用throw ex,可以使用throw。具体区别请见此贴: http://www.cnblogs.com/JerryTian/archive/2012/09/24/2699459.html
Poopaye 2015-12-05
  • 打赏
  • 举报
回复
引用 3 楼 wangxiaoyu_net 的回复:
[quote=引用 2 楼 shingoscar 的回复:] 看你的代码,内部方法没有意思去处理那个异常,不要用try-catch 在你真正想处理的地方去加 按照你的描述,你只是想知道异常出现在哪里,但没有特别的处理方法,那没必要乱用try-catch。 程序出问题的时候会有弹出框的,而且windows的日志里也会记录下来,你加上try反而影响处理问题
确实没有处理异常,我只想知道异常在哪里,因为自己写Sql语句时,经常不是漏掉逗号,就是漏掉单引号,所以希望程序抛出异常来提示自己,而不是直接让IIS报错(我写的是ASP.NET程序)。之前没有考虑过try-catch的真正作用在哪里,听你这么一说,感觉是当需要自己处理异常时,就可以使用try-catch语句块了,对吗?[/quote] 是的
小K的大师兄 2015-12-05
  • 打赏
  • 举报
回复
public static bool SqlUpdate(string str_update){ conn.Open(); SqlCommand cmd = new SqlCommand(str_update,conn) if(cmd.ExecuteNonQuery() == 1) return true; else return false; } protected void button_click(object sender, EventArgs e) { try { string strUpdate = @"update Main set name='刘明',sex='男'"; if(SqlUpdate(strUpdate)) labMessage.Text = “联系人信息修改成功”; } catcth(Exception e) { e.message } }
网字 2015-12-05
  • 打赏
  • 举报
回复
引用 1 楼 guwei4037 的回复:
try{ ... }catch(Exception ex){ throw ex; } 或者public static bool SqlUpdate(string str_update) throw Exception 内部方法如上抛出异常,外部方法try...catch,catch里面就能或者内部方法抛出的异常实例。
不太明白,我在catch中throw ex;之后,在外部方法比如button_click()中,如何捕获呢?
网字 2015-12-05
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
看你的代码,内部方法没有意思去处理那个异常,不要用try-catch 在你真正想处理的地方去加 按照你的描述,你只是想知道异常出现在哪里,但没有特别的处理方法,那没必要乱用try-catch。 程序出问题的时候会有弹出框的,而且windows的日志里也会记录下来,你加上try反而影响处理问题
确实没有处理异常,我只想知道异常在哪里,因为自己写Sql语句时,经常不是漏掉逗号,就是漏掉单引号,所以希望程序抛出异常来提示自己,而不是直接让IIS报错(我写的是ASP.NET程序)。之前没有考虑过try-catch的真正作用在哪里,听你这么一说,感觉是当需要自己处理异常时,就可以使用try-catch语句块了,对吗?
Poopaye 2015-12-05
  • 打赏
  • 举报
回复
看你的代码,内部方法没有意思去处理那个异常,不要用try-catch 在你真正想处理的地方去加 按照你的描述,你只是想知道异常出现在哪里,但没有特别的处理方法,那没必要乱用try-catch。 程序出问题的时候会有弹出框的,而且windows的日志里也会记录下来,你加上try反而影响处理问题
全栈极简 2015-12-05
  • 打赏
  • 举报
回复
try{ ... }catch(Exception ex){ throw ex; } 或者public static bool SqlUpdate(string str_update) throw Exception 内部方法如上抛出异常,外部方法try...catch,catch里面就能或者内部方法抛出的异常实例。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧