成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CLR觸發器實戰演練

開發 后端
CLR觸發器的原理比較簡單,但是實現起來要花一番功夫,筆者總結了以下經驗,還有一個異常的實例。

CLR觸發器的原理比較簡單,但是實現起來要花一番功夫,筆者總結了以下經驗,還有一個異常的實例。

CLR觸發器實現代碼:

  1. [Microsoft.SqlServer.Server.SqlTrigger(Name = "Trigger1"Target = 
  2. "ERP_STOCKYaoHuoDingDan"Event = "FOR INSERT")]  
  3. public static void DingDanIDSameGongYingShangGUIDMustSame()  
  4. {  
  5.   using (SqlConnection connection = new SqlConnection
  6. (@"context connection=true"))  
  7.   {  
  8.     connection.Open();  
  9.     SqlCommand command = new SqlCommand(@"SELECT COUNT(A.DingDanID)
  10.  FROM ERP_STOCKYaoHuoDingDan AS
  11.  A,INSERTED AS B WHERE A.DingDanID=B.DingDanID AND
  12.  A.GongYingShangGUID<>B.GongYingShangGUID", connection);  
  13.     int i=(int)command.ExecuteScalar();  
  14.      if (i>0)  
  15.    {  
  16.     try  
  17.      {  
  18.       //如果要插入的記錄不合法,則回滾.   
  19.        Transaction trans = Transaction.Current;  
  20.        trans.Rollback();  
  21.      }  
  22.      catch (SqlException ex)  
  23.        {  
  24.               connection.Close(); 
  25.        }  
  26. }
  27. }
  28. }
  29.  

當在CLR觸發器內部調用 Transaction.Rollback 方法時,將引發異常并顯示不明確的錯誤消息,必須在try/catch 塊中包裝此方法或命令。您會看到如下錯誤消息:

Msg 6549, Level 16, State 1, Procedure trig_InsertValidator, Line 0 A .NET Framework error occurred during execution of user defined routine or aggregate 'trig_InsertValidator': System.Data.SqlClient.SqlException: Transaction is not allowed to roll back inside a user defined routine, trigger or aggregate because the transaction is not started in that CLR level. Change application logic to enforce strict transaction nesting… User transaction, if any, will be rolled back.

此異常是預期行為,需要 try/catch 塊才能繼續執行代碼。當完成執行CLR觸發器代碼時,將引發另一個異常。

Msg 3991, Level 16, State 1, Procedure trig_InsertValidator, Line 1 The context transaction which was active before entering user defined routine, trigger or aggregate "trig_InsertValidator" has been ended inside of it, which is not allowed. Change application logic to enforce strict transaction nesting. The statement has been terminated.
此異常也是預期行為。

調用該CLR觸發器的例子

盡管引發了兩個異常,仍可以回滾事務,并且更改不會提交到表中。

  1. try  
  2. {  
  3.  
  4.     //用到此觸發器的方法  
  5. }  
  6. catch (SqlException ex)  
  7. {  
  8.    if (ex.Number == 3991)  
  9.    {  
  10.       LabelInfor.Text = "同一張訂單必須是同一家供應商。";  
  11.    }  
  12. }  
  13. catch (Exception ex)  
  14. {  
  15.  ......  

以上就是對CLR觸發器的實戰演練。

【編輯推薦】

  1. 淺析C#數組操作方法
  2. C#數組操作全面分析
  3. C#數組和串操作經驗總結
  4. 為你解疑:CLR是什么?
  5. 分析與對比CLR Via C#靜態構造函數的性能
責任編輯:阡陌 來源: 新浪博客
相關推薦

2009-10-22 17:18:20

CLR觸發器

2011-05-20 14:06:25

Oracle觸發器

2021-08-05 07:28:27

SQL觸發器結構

2011-03-28 10:05:57

sql觸發器代碼

2009-11-18 13:15:06

Oracle觸發器

2011-05-19 14:29:49

Oracle觸發器語法

2021-07-30 10:33:57

MySQL觸發器數據

2011-04-14 13:54:22

Oracle觸發器

2010-05-18 15:58:39

MySQL觸發器

2010-05-31 18:06:07

MySQL 觸發器

2010-10-12 10:04:15

MySQL觸發器

2010-10-12 10:24:58

mysql觸發器

2010-05-26 17:57:44

MySQL 觸發器

2010-09-13 17:03:34

sql server觸

2009-04-07 13:56:03

SQL Server觸發器實例

2010-04-15 15:32:59

Oracle操作日志

2009-12-23 17:49:28

WPF觸發器

2010-04-23 12:50:46

Oracle觸發器

2010-05-18 15:36:44

MySQL觸發器

2010-09-01 16:40:00

SQL刪除觸發器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 丁香婷婷成人 | 精品一区二区三区在线观看 | 亚洲人成在线观看 | 午夜精品一区二区三区免费视频 | 美女毛片免费看 | 羞羞的视频免费在线观看 | 久久久久久一区 | 日日爱视频| 国产精品一区二区三区在线 | 啪啪免费 | 91视频免费在观看 | 久久国产福利 | 日韩在线视频免费观看 | 久久精品二区 | 视频一区二区在线观看 | 日本a∨精品中文字幕在线 亚洲91视频 | 羞羞视频在线网站观看 | 欧美一级在线免费 | 亚洲综合大片69999 | 久久久久久国产精品三区 | 色.com | 久久精品在线播放 | 日韩伦理一区二区三区 | 国产在线观看不卡一区二区三区 | av中文字幕在线播放 | 2022精品国偷自产免费观看 | 秋霞电影一区二区三区 | 一本色道精品久久一区二区三区 | 黄色片在线观看网址 | 国产日韩欧美一区二区 | 日本在线视频一区二区 | 成在线人视频免费视频 | 蜜臀久久99精品久久久久久宅男 | 国产精品a一区二区三区网址 | 最新av在线网址 | 国产精品毛片无码 | 国产日韩欧美一区二区在线播放 | 男女羞羞视频在线看 | 久久中文字幕在线 | 久久久久久九九九九九九 | 99久久婷婷国产精品综合 |