C# catch 塊中可以俘獲 SQL Server 拋出的自訂異常(RAISERROR)(轉)

來源:互聯網
上載者:User
   對於數據庫這塊我基本上算是個文盲。今天看到別人的文章感覺還可以,雖對其中的原理不是很懂,但先學習一下。
原文如下:(代碼部分被自己的代碼取代)

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

轉自:http://www.cnblogs.com/anjou/archive/2007/11/17/962846.html
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.