.NET技術是微軟大力推廣的下一代平臺技術,自從.NET技術架構Beta2版本的正式發布,此項技術也逐漸走向成熟和穩定。按照微軟的平臺系統占有率,我們不難想象得到,在未來的一兩年內.NET技術必定會勢如破竹一般的登上主流的技術平臺,而一個新的技術平臺得以快速發展的最重要的前提是:他不會徹底的摒棄以前的技術,這一點對于.NET技術來說指的就是COM/COM+技術了。
菜單:(項目-添加引用-在.NET選項卡選擇System.EnterpristServices-確定)
using System.EnterpriseServices; using System.Data.SqlClient; using System.Reflection;
{ //表明需要事務支持 [ Transaction(TransactionOption.Required) ] //聲明為服務器應用程序,還可以選擇Library,表示為庫應用程序 [assembly: ApplicationActivation(ActivationOption.Server)] //描述信息 [assembly: Description("sample")]
{ private static string init1 = "user id=sa;password=;initial catalog=pubs;data source=(local)";
private static string add2 = "insert into sample values('test1',22)"; //the error sql statement //there is not table “sample”
{ SqlConnection conn = new SqlConnection(init); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); }
public void Add() { try { //在一數據庫中插入一條記錄
Console.WriteLine("the operation in the same database completely");
//這次執行的是一個錯誤的SQL語句
Console.WriteLine("the operation in the other database completely");
Console.Read();
catch(Exception e) { //事務回滾 ContextUtil.SetAbort(); Console.WriteLine("Because there are some errors in the operation ,so transcation abort"); Console.WriteLine("The error is " + e.Message); Console.WriteLine("abort successfully"); Console.Read(); } } } } 2:程序說明: 添加命名空間 using System.EnterpriseServices;因為本程序使用了其中的ContextUtil類 [ Transaction(TransactionOption.Required) ] 說明DLL需要事務支持 本程序的TxCfgClass 類從ServicedComponent類中繼承,這樣并不會影響該類,而只是在該類中添加了兩個額外的方法,這兩個方法可以使代碼共享變得更加容易 程序使用的sql server數據庫在本機運行,init1 和 init2是兩個連接數據庫的連接字符串,init連接pubs數據庫,inin2連接northwind數據庫,這是sql2000中自帶的示例數據庫。add1和add2是兩條sql語句,作用是分別向兩個數據庫的表里添加一條記錄。注意:add2是一條錯誤的語句,因為根本沒有sample表,這樣,會在執行時引起異常。(這正是我們所期望的) 在執行到add2語句時,由于它是錯誤的,所以會引發異常,轉到錯誤處理語句里來執行。 ContextUtil.SetAbort();該語句使所有的數據庫操作回滾,這樣add1語句所插入的記錄也將不存在。(達到預期目標)
1:創建一對密鑰 用來創建密鑰的工具是稱為sn.exe的共享工具。通常通過命令提示運行它,該工具可執行各種任務以生成并提取密鑰。我們需要用以下方式來運行sn.exe。 sn –k key.snk 其中key.snk 代表將保存密鑰的文件的名稱。它的名稱可以是任意的,不過習慣上帶有.snk后綴名。 2:簽名 簽名通常是在編譯時進行的。簽名時,用戶可利用C#屬性通知編譯器應該使用正確的密鑰文件對DLL進行簽名。要做到這一點用戶需要打開工程中的AssemblyInfo.cs文件并進行修改。 [assembly:AssemblyKeyFile(“..\\..\\key.snk”)] 注:key.snk文件和項目文件在同一個文件夾
菜單:(生成-生成) 如果一切正常,就會生成DLL文件
我們需要用以下方式運行regsvcs.exe regsvcs dll文件名 如果一切正常的話,regsvcs.exe就會把dll輸入到COM+ Services中。
1:新建控制臺應用程序項目 菜單(文件-新建-項目) 選擇控制臺應用程序 ,并選擇 添入解決方案 ,確定 2:同上面的第二步一樣,添加對System.EnterpriseServices的引用。 3:添加對自己剛才做好的類的引用。 菜單(項目-添加引用-瀏覽),選擇剛才生成的DLL,確定 4:輸入以下程序 using System; using COMPlusSamples; using System.EnterpriseServices;
{ public static void Main() { TxCfgClass cfg = new TxCfgClass(); cfg.Add(); } }
正如我們希望的,第一條記錄沒有插入數據庫
|
溫馨提示:喜歡本站的話,請收藏一下本站!