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”

  • 相关阅读:
    POJ 1681 Painter's Problem(高斯消元法)
    HDU 3530 Subsequence(单调队列)
    HDU 4302 Holedox Eating(优先队列或者线段树)
    POJ 2947 Widget Factory(高斯消元法,解模线性方程组)
    HDU 3635 Dragon Balls(并查集)
    HDU 4301 Divide Chocolate(找规律,DP)
    POJ 1753 Flip Game(高斯消元)
    POJ 3185 The Water Bowls(高斯消元)
    克琳:http://liyu.eu5.org
    WinDbg使用
  • 原文地址:https://www.cnblogs.com/lenther2002/p/4449425.html
Copyright © 2011-2022 走看看