zoukankan      html  css  js  c++  java
  • C# 捕获数据库自定义异常

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

  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/lenther2002/p/4449425.html
Copyright © 2011-2022 走看看