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();
}
...全文
259 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里面就能或者内部方法抛出的异常实例。
代码下载链接: https://pan.quark.cn/s/3379ee0243ef 在IAR调试环节中,使用者或许会遭遇各式各样的故障,这些故障可能波及编译、链接以及执行时的情形。下面列出了部分常见的IAR调试故障及其应对措施: 1. **头文件中全局变量的声明**:IAR链接器不允许在头文件里声明全局变量,但容许多个源文件同时引用同一变量。一旦出现此类状况,应将全局变量声明为`extern`类型。例如,错误信息`Error[e27]: Entry "tagData" redefined`可以通过在头文件中附加`extern`关键字来纠正。 2. **隐式指定的函数**:`Error[Pe223]: function "assert_param" declared implicitly`指出函数`assert_param`未被显式地定义。务必确保包含了适宜的头文件,比如`stm32f10x_conf.h`,该文件内含了该函数的原型。倘若已包含,则可能是库文件版本不匹配或项目配置存在疑惑。 3. **无原型指引的函数**:`Error[Pa045]: function "assert_param" has no prototype`与上述情形相似,意指函数缺乏相应的原型声明。仔细核对相关头文件,保证它们在使用前已被适当地引入。 4. **标识符未获定义**:`Error[Pe020]: identifier "RCC_APB2Periph_GPIOC" is undefined`表明某个标识符的定义未能找到,这通常源于未引入必要的头文件。在此情形下,需包含`stm32f10x_rcc.h`。 5. **宏定义与编译文件的矛盾**:若尝试调整设备配置,如从STM...
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 MPU6050是由InvenSense公司研发的六轴惯性测量单元(IMU),该设备融合了三轴陀螺仪和三轴加速度计。它能够即时检测设备在三维空间中的运动参数,例如角速度和加速度等指标。DMP(Digital Motion Processing)是MPU6050内部集成的一种硬件加速技术,它能够对传感器数据进行处理并实现姿态计算,从而降低主控制器如STM32的计算压力。 STM32是一款基于ARM Cortex-M架构的微控制器,该器件在嵌入式系统领域得到了广泛部署,其特点是处理性能高且能耗低,非常适合用于处理复杂的传感器数据和控制任务。在MPU6050的姿态计算应用场景中,STM32通常负责与MPU6050进行通信、获取传感器数据,并基于DMP提供的结果进行后续的数据处理和应用。 在"MPU6050姿态计算STM32源代码(DMP)"这一项目中,研究者已经完成了将MPU6050的六轴数据通过DMP进行加工,并利用STM32进行读取和解析这些数据的工作。源代码可能涵盖以下几个核心组成部分: 1. **配置初始化**:初始化STM32的GPIO、I2C接口,目的是为了与MPU6050建立有效的通信连接。此外,还需要对MPU6050的寄存器进行设置,激活DMP功能,并设定采样频率和滤波器参数。 2. **数据交换**:利用STM32的I2C接口周期性地从MPU6050获取DMP的输出结果,这些数据通常涵盖设备的角速度、加速度以及姿态角(包括俯仰角、翻滚角和偏航角等)。 3. **姿态计算**:尽管DMP已经对原始数据进行了基础处理,但在STM32端可能还需要进行二次处理,例如采用卡尔...

111,129

社区成员

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

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

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