在 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”

C# 捕获数据库自定义异常的更多相关文章

  1. SpringBoot------全局异常捕获和自定义异常

    1.添加Maven依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w ...

  2. Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获

    一.全局异常 1.首先创建异常处理包和类 2.使用@ControllerAdvice注解,全局捕获异常类,只要作用在@RequestMapping上,所有的异常都会被捕获 package com.ex ...

  3. Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息

    Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息 1.1. 异常的处理模式exit  continue undo模式 1 1.2. 捕获所有异常使用        DECLARE ...

  4. java中与数据库的连接

    package unitl01; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet; ...

  5. 异构数据库迁移 db2---oracle

    异构数据库迁移 其他数据库迁移到oracle,以移植db2数据库对象到Oracle的操作说明为例,其他数据库迁移到oracle类似. 移植之平台和相关工具 OS:linux DBMS:db2  Ora ...

  6. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  7. SQL SERVER 2008 服务器登录名、角色、数据库用户、角色、架构的关系

    sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户可以对应多个架构(架构是表容器).架构里面包含的是数据库表. 2.一个数据库角色有可能涉及多个架构.数据 ...

  8. 数据库SQLserver(课本)

    一.SQL server的部署 1.数据库的基本概念 数据库通常是一个由行和列组成的二维表 数据表中的行通常叫做记录或元祖 数据表中的列通常叫做字段或属性 2.主键和外键 主键:定义主键可以保证数据的 ...

  9. SQL Server 登录名、服务器角色、用户名和数据库角色 --- 解释

    一.基本解释 登录名:登录服务器的用户账号: 服务器角色:登录名对该服务器具有的权限,角色分多种的,一个角色可以有多个登录名,如操作系统的系统用户可以有多个. SQL服务器角色  sysadmin   ...

随机推荐

  1. 跳出NSDate

    感觉任何语言关于时间的格式化处理,时区的处理都是多的,最近被NSDate的各种问题坑了好久 先看看关于NSDate自己的问题 1.NSDate NSDate获取当前时间 NSDate *date=[N ...

  2. Android REST webservice 类

    App与后台交互,后台使用的是Jersey RESTful 服务.在APP端使用Android 内部集成的HttpClient接口,无需引入第三方jar包, import org.apache.htt ...

  3. Java基础 - 面向对象 - 构造方法

    在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法.构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的.每当类实例化一个对象时,类都会自动调用构造方法. 构造方法的特点: 构 ...

  4. Java 之多线程通信(等待/唤醒)

    多线程间通信: 多个线程在处理同一个资源, 但是任务却不同. 等待/唤醒机制 涉及的方法 wait(): 让线程处于冻结状态, 被 wait() 的线程会被存储到线程池中 notify(): 唤醒线程 ...

  5. Python位运算符

    按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下: 下表中变量 a 为 60,b 为 13,二进制格式如下: a = 0011 1100 b = 0000 1101 ---- ...

  6. hibernate自动建表之engine设置

    1.MYSQL的数据库引擎中,只有InnoDB和BDB(Berkley DB )包括了对事务处理和外键的支持.如果数据引擎建为MyISAM则rollback无效. 2.而hibernate自动建表的时 ...

  7. android学习四---Activity和Intent

    1.android项目资源深入了解 在深入学习android之前,先好好玩玩手机上的应用,大部分程序都有一个图标,点开图标,程序启动,一定时间后,程序会跳转到第一个界面,比如手机QQ,点开图标,会跳出 ...

  8. 判断元素的16中方法expected_conditions

    from selenium.webdriver.support import expected_conditons as EC 1.title_is:判断当前页面的title是否完全等于预期字符串,返 ...

  9. PAT 1071 Speech Patterns[一般]

    1071 Speech Patterns (25 分) People often have a preference among synonyms of the same word. For exam ...

  10. Mahout学习路线图-张丹老师

    前言 Mahout是Hadoop家族中与众不同的一个成员,是基于一个Hadoop的机器学习和数据挖掘的分布式计算框架.Mahout是一个跨学科产品,同时也是我认为Hadoop家族中,最有竞争力,最难掌 ...