SQL Server 抛出自定义异常,由C#程序俘获之并进行相应的处理
最近一直在找可以自定义异常,并用C#程序捕获并进行相应的处理,试了很多方法都没有成功。今天终于找到了不错的方法。所以转载并分享给大家。
摘自:http://www.cnblogs.com/scottckt/archive/2007/12/07/986847.html
在 SQL Server 的存储过程中根据业务逻辑的要求,有时需要抛出自定义异常,由C#程序俘获之并进行相应的处理。SQL Server 抛出自定义异常和简单,像这样就可以了:RAISERROR('Rais Error1', 16, 1) WITH NOWAIT但定用什么样的错误级别却很讲究,否则 C# 中的 catch 块可能俘获不到的。
SQL Servr 抛出自定义异常的方法一般这么写就可以:RAISERROR('Rais Error1', 16, 1) WITH NOWAIT
其中数字 16 代表错误级别:错误级别从 0 到 25, 其中 19 到 25 是重大错误级别。
注:小于 0 的级别被解释为 0,大于 25 的级别被解释为 25。
任何用户都可以指定 0 到 18 之间的错误级别。
19 到 25 级别的错误,只能由 sysadmin 角色的成员用 WITH LOG 选项指定。
19 到 25 级别的错误,将记录到错误日志和应用程序日志。
20 到 25 级别的错误,被认为是致命的;遇到致命的级别错误,客户端的连接将在收到消息后终止。C# 中的 catch 块中可以俘获 错误级别 11 到 19 级别的异常。
0 到 10 级别的错误根本不进catch 块;而 20 到 25 级别的异常,被认为是致命的,会被断开数据库连接。所以 C# cath 块可以接受到这种异常,但异常的内容不是真正的异常内容,可能是类似这样的内容:“在从服务器接收结果时发生传输级错误”。
public void GetSqlError()
{
try
{
string connString = "Data Source=CCM02//SQLEXPRESS;Initial Catalog=Northwind;User ID=sa;Password=sh2_123";
string sql = "select * from Products";
string raisError = "RAISERROR('Rais Error1', 16, 1) WITH NOWAIT";
sql = sql + ";" + raisError;
SqlConnection con = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
rtbValue.Text = ex.Message.ToString();
}
}
結果:
rtbValue.Text的值為:“Rais Error1”
SQL Server 抛出自定义异常,由C#程序俘获之并进行相应的处理的更多相关文章
- 抛出自定义异常,spring AOP事务不回滚的解决方案
spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )
SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...
- C# 调用存储过程 Sql Server存储过程 存储过程报错,程序中的try
C#程序调用Sql Server存储过程,存储过程中报错情况,返回值... 0.SQL存储过程 USE [Opos] GO /****** Object: StoredProcedure [dbo]. ...
- SQL Server 利用锁提示优化Row_number()-程序员需知
网站中一些老页面仍采用Row_number类似的开窗函数进行分页处理,此时如果遭遇挖坟帖的情形可能就需要漫长的等待且消耗巨大.这里给大家介绍根据Row_number()特性采用特定锁Hint提升查询速 ...
- SQL Server 找出值得优化的语句
方法 1. sys.dm_exec_qurey_stats 返回 SQL Server 中缓存查询计划的聚合性能统计信息. 缓存计划中的每个查询语句在该视图中对应一行, 并且行的生存期与计划本身相关联 ...
- 自定义Exception:MVC抛出自定义异常,并以Json方式返回
相关链接 优点: 可以统一处理所有页面的异常,对所有需要返回json数据的异常,都用同样的方法throw new DVMException().页面展示,controller的错误处理方式一样 节省编 ...
- python7.2抛出自定义异常
pwd="123456"if len(pwd)<8: ex= Exception("密码不能低于8位数!")#自定义异常 raise ex #抛出自定义的 ...
- Python强制抛出自定义异常
raise Exception("My Exception") 当程序运行到这行时,会抛出异常,打印出Exception: My Exception
- sql server查询出的结果中添加一列序列行
select row_number()over(order by id) as rownum ,[UserName] ,[Password] ,[Mobile] ,[Email] ,[Sex] ,[C ...
随机推荐
- QT屏蔽qDebug的方法
在工程文件.pro里面添加 DEFINES += QT_NO_WARNING_OUTPUT\ QT_NO_DEBUG_OUTPUT 然后rebuild all.这样 ...
- 这里有个坑---entity为null的问题
这里有个坑,最近加班赶个项目,忽然遇到个这个坑,先记录下来,纯当自己提高.---------每一个遇到的坑总结后都是一比财富. 我们在做项目是会使用ajax返回结果,在返回结果的时候一般选择json数 ...
- js模仿新浪微博限制字数输入
功能:实现新浪微博输入字数提醒功能:最多输入140个字,当输入字时,上面提示部分字数发生变化,如果字数小于25,字体颜色变红:当可输入字数为0时,强制不能输入,如果用中文输入法 一次性输入很多字,那么 ...
- Infinispan 8 中新的 Redis 缓存存储实现
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/147.html nfinispan 8 包含了一个新的在 Redis k/ ...
- Java-接口练习1
1.(1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积.int getCircumference():获得图形的周长 (2)编写一个圆类Circl ...
- DDD~基础设施层~续
回到目录 在之前写的DDD~基础设施层文章中,提到了UnitOfWork,它里面有一些方法,但经过项目证明,不应该有Save和IsExplicitSubmit,而这个工作单元只起到了数据上下文统一的作 ...
- 基础才是重中之重~AutoMapper为已有目标对象映射
回到目录 AutoMapper各位一定不会陌生,大叔之前的文章中也提到过,曾经也写过扩展方法,以方便程序开发人员去使用它,而在最近,大叔在一个API项目里,在一个POST请求由DTO对象为实体对象赋值 ...
- 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
- js选项卡
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 分析优秀的.NET 文档设计工具Vsdocman 7.1 软件保护技术
Vsdocman是一个优秀的.NET源代码注释编写工具,方便的以GUI的方式设计.NET源代码的注释. 我们知道.NET源代码的注释是Xml格式的注释,在生成程序集时,只需用选中生成Xml注释,Vis ...