![](http://blog.51cto.com/images/editer/InBlock.gif)
1using System;
![](http://blog.51cto.com/images/editer/InBlock.gif)
2using System.Collections.Generic;
![](http://blog.51cto.com/images/editer/InBlock.gif)
3using System.Text;
![](http://blog.51cto.com/images/editer/InBlock.gif)
4using System.Data;
![](http://blog.51cto.com/images/editer/InBlock.gif)
5using System.Data.SqlClient;
![](http://blog.51cto.com/images/editer/InBlock.gif)
6using System.EnterpriseServices;
![](http://blog.51cto.com/images/editer/InBlock.gif)
7[assembly: ApplicationName( "FrankEnterpriseServicesTransactionTest")] //在组件服务浏览器里的名称
![](http://blog.51cto.com/images/editer/InBlock.gif)
8[assembly: Description( "Coded By Frank Xu Lei 2/14/2009")] //在组件服务浏览器里的描述信息
![](http://blog.51cto.com/images/editer/InBlock.gif)
9[assembly: ApplicationActivation(ActivationOption.Server)] //启动类型Library在创建进程里激活,运行在客户进程,Server类型系统进程激活,
![](http://blog.51cto.com/images/editer/InBlock.gif)
10[assembly: ApplicationAccessControl( false)] //访问设置,关闭后,用户都可以访问
![](http://blog.51cto.com/images/editer/InBlock.gif)
11namespace EnterpriseServicesCOM
![](http://blog.51cto.com/images/editer/InBlock.gif)
12{
![](http://blog.51cto.com/images/editer/InBlock.gif)
13 //每个服务器组件必须继承自类ServicedComponent,ServicedComponent类继承自ContextBoundObject
![](http://blog.51cto.com/images/editer/InBlock.gif)
14 //这样服务就可以绑定到.net环境上
![](http://blog.51cto.com/images/editer/InBlock.gif)
15 //
![](http://blog.51cto.com/images/editer/InBlock.gif)
16 [EventTrackingEnabled( true)] //允许监视,组件对象浏览器可以看到。默认关闭,因为会降低性能
![](http://blog.51cto.com/images/editer/InBlock.gif)
17 [Description( "Coded By Frank Xu Lei For EnterpriseServices Transaction Test")] //组件对象浏览器显示的描述信息
![](http://blog.51cto.com/images/editer/InBlock.gif)
18 //[JustInTimeActivation(false)]//打开或者关闭JIT启动
![](http://blog.51cto.com/images/editer/InBlock.gif)
19 [ObjectPooling( true, 1, 10)] //是否启用对象池,如果对象创建消耗更多的资源,可以考虑对象池
![](http://blog.51cto.com/images/editer/InBlock.gif)
20 [Transaction(TransactionOption.Supported)] //是否需要支持事务特性
![](http://blog.51cto.com/images/editer/InBlock.gif)
21
![](http://blog.51cto.com/images/editer/InBlock.gif)
22 public class EnterpriseServicesCOMPlusTransaction : ServicedComponent
![](http://blog.51cto.com/images/editer/InBlock.gif)
23 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
24 //构造函数
![](http://blog.51cto.com/images/editer/InBlock.gif)
25 public EnterpriseServicesCOMPlusTransaction()
![](http://blog.51cto.com/images/editer/InBlock.gif)
26 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
27
![](http://blog.51cto.com/images/editer/InBlock.gif)
28 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
29 //新增用户user信息,姓名长度表name和address的长度都是10字符,user2的长度都是100字符,此处调用Ado.net据持久层方法
![](http://blog.51cto.com/images/editer/InBlock.gif)
30 //[AutoComplete]//设置方法属性,自动更新方法调用的结果
![](http://blog.51cto.com/images/editer/InBlock.gif)
31 public bool AddUser( string name, string address)
![](http://blog.51cto.com/images/editer/InBlock.gif)
32 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
33 //调用另外一个COM组件的方法,主要是测试事务的完整性
![](http://blog.51cto.com/images/editer/InBlock.gif)
34 SqlConnection Conn;
![](http://blog.51cto.com/images/editer/InBlock.gif)
35 try
![](http://blog.51cto.com/images/editer/InBlock.gif)
36 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
37 //user,第1次执行的插入操作,字段长度限制10个字符
![](http://blog.51cto.com/images/editer/InBlock.gif)
38 //使用DataSet向导创建方法操作数据库,
![](http://blog.51cto.com/images/editer/InBlock.gif)
39 EnterpriseServicesCOM.DatabaseDataSetTableAdapters.userTableAdapter _userTableAdapter = new EnterpriseServicesCOM.DatabaseDataSetTableAdapters.userTableAdapter();
![](http://blog.51cto.com/images/editer/InBlock.gif)
40 _userTableAdapter.Insert(name, address);
![](http://blog.51cto.com/images/editer/InBlock.gif)
41 /** /////user2,第2次执行的插入操作,字段长度限制100个字符
![](http://blog.51cto.com/images/editer/InBlock.gif)
42 EnterpriseServicesCOM.DatabaseDataSetTableAdapters.user2TableAdapter _user2TableAdapter = new EnterpriseServicesCOM.DatabaseDataSetTableAdapters.user2TableAdapter();
![](http://blog.51cto.com/images/editer/InBlock.gif)
43 _user2TableAdapter.Insert(name, address);
![](http://blog.51cto.com/images/editer/InBlock.gif)
44 //也可以自己写代码实现数据库的操作
![](http://blog.51cto.com/images/editer/InBlock.gif)
45
![](http://blog.51cto.com/images/editer/InBlock.gif)
46 //SqlConnection Conn = new SqlConnection("Data Source=|DataDirectory|Database.sdf");
![](http://blog.51cto.com/images/editer/InBlock.gif)
47 //Conn.Open();
![](http://blog.51cto.com/images/editer/InBlock.gif)
48 /** ///// //user,第1次执行的插入操作,字段长度限制10个字符
![](http://blog.51cto.com/images/editer/InBlock.gif)
49 //SqlCommand sqlCommand = new SqlCommand("INSERT INTO [user] (name, address) VALUES (" + name + "," + address + ")");
![](http://blog.51cto.com/images/editer/InBlock.gif)
50 //sqlCommand.ExecuteNonQuery();
![](http://blog.51cto.com/images/editer/InBlock.gif)
51 /** /////user2,第2次执行的插入操作,字段长度限制100个字符
![](http://blog.51cto.com/images/editer/InBlock.gif)
52 //sqlCommand.CommandText = "INSERT INTO [user2] (name, address) VALUES (" + name + "," + address + ")";
![](http://blog.51cto.com/images/editer/InBlock.gif)
53 //sqlCommand.ExecuteNonQuery();
![](http://blog.51cto.com/images/editer/InBlock.gif)
54
![](http://blog.51cto.com/images/editer/InBlock.gif)
55 ContextUtil.SetComplete(); //事务成功
![](http://blog.51cto.com/images/editer/InBlock.gif)
56 //Conn.Close();
![](http://blog.51cto.com/images/editer/InBlock.gif)
57 return true;
![](http://blog.51cto.com/images/editer/InBlock.gif)
58 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
59 catch (Exception e)
![](http://blog.51cto.com/images/editer/InBlock.gif)
60 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
61 ContextUtil.SetAbort(); //失败,事务回滚,终止
![](http://blog.51cto.com/images/editer/InBlock.gif)
62 return false;
![](http://blog.51cto.com/images/editer/InBlock.gif)
63 throw e;
![](http://blog.51cto.com/images/editer/InBlock.gif)
64
![](http://blog.51cto.com/images/editer/InBlock.gif)
65 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
66 finally
![](http://blog.51cto.com/images/editer/InBlock.gif)
67 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
68 //if (Conn != null)
![](http://blog.51cto.com/images/editer/InBlock.gif)
69 //{
![](http://blog.51cto.com/images/editer/InBlock.gif)
70 // Conn.Dispose();//释放资源
![](http://blog.51cto.com/images/editer/InBlock.gif)
71 // Conn = null;
![](http://blog.51cto.com/images/editer/InBlock.gif)
72 //}
![](http://blog.51cto.com/images/editer/InBlock.gif)
73 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
74 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
75 //更新数据库的2个表,此处可以调用数据持久层方法
![](http://blog.51cto.com/images/editer/InBlock.gif)
76 //[AutoComplete]//设置方法属性,自动更新方法调用的结果
![](http://blog.51cto.com/images/editer/InBlock.gif)
77 public bool UpdateUser( string name, string address, int id)
![](http://blog.51cto.com/images/editer/InBlock.gif)
78 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
79 //调用另外一个COM组件的方法,主要是测试事务的完整性
![](http://blog.51cto.com/images/editer/InBlock.gif)
80 SqlConnection Conn;
![](http://blog.51cto.com/images/editer/InBlock.gif)
81 try
![](http://blog.51cto.com/images/editer/InBlock.gif)
82 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
83 //使用DataSet向导创建方法操作数据库,
![](http://blog.51cto.com/images/editer/InBlock.gif)
84 EnterpriseServicesCOM.DatabaseDataSetTableAdapters.userTableAdapter _userTableAdapter = new EnterpriseServicesCOM.DatabaseDataSetTableAdapters.userTableAdapter();
![](http://blog.51cto.com/images/editer/InBlock.gif)
85 _userTableAdapter.Update(name,address,id);
![](http://blog.51cto.com/images/editer/InBlock.gif)
86
![](http://blog.51cto.com/images/editer/InBlock.gif)
87 EnterpriseServicesCOM.DatabaseDataSetTableAdapters.user2TableAdapter _user2TableAdapter = new EnterpriseServicesCOM.DatabaseDataSetTableAdapters.user2TableAdapter();
![](http://blog.51cto.com/images/editer/InBlock.gif)
88 _user2TableAdapter.Update(name, address, id);
![](http://blog.51cto.com/images/editer/InBlock.gif)
89 //也可以自己写代码实现数据库的操作
![](http://blog.51cto.com/images/editer/InBlock.gif)
90 //SqlConnection Conn = new SqlConnection("Data Source=|DataDirectory|Database.sdf");
![](http://blog.51cto.com/images/editer/InBlock.gif)
91 //Conn.Open();
![](http://blog.51cto.com/images/editer/InBlock.gif)
92 /** /////
![](http://blog.51cto.com/images/editer/InBlock.gif)
93 //SqlCommand sqlCommand = new SqlCommand("UPDATE [user] SET name = " + name + ", address =" + address + "WHERE (id =" + id + ")");
![](http://blog.51cto.com/images/editer/InBlock.gif)
94 //sqlCommand.ExecuteNonQuery();
![](http://blog.51cto.com/images/editer/InBlock.gif)
95
![](http://blog.51cto.com/images/editer/InBlock.gif)
96 //sqlCommand.CommandText = "UPDATE [user2] SET name = " + name + ", address =" + address + "WHERE (id =" + id + ")";
![](http://blog.51cto.com/images/editer/InBlock.gif)
97 //sqlCommand.ExecuteNonQuery();
![](http://blog.51cto.com/images/editer/InBlock.gif)
98
![](http://blog.51cto.com/images/editer/InBlock.gif)
99 ContextUtil.SetComplete(); //事务成功
![](http://blog.51cto.com/images/editer/InBlock.gif)
100 return true;
![](http://blog.51cto.com/images/editer/InBlock.gif)
101 //Conn.Close();
![](http://blog.51cto.com/images/editer/InBlock.gif)
102 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
103 catch (Exception e)
![](http://blog.51cto.com/images/editer/InBlock.gif)
104 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
105 ContextUtil.SetAbort(); //失败,事务回滚,终止
![](http://blog.51cto.com/images/editer/InBlock.gif)
106 return false;
![](http://blog.51cto.com/images/editer/InBlock.gif)
107 throw e;
![](http://blog.51cto.com/images/editer/InBlock.gif)
108 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
109 finally
![](http://blog.51cto.com/images/editer/InBlock.gif)
110 {
![](http://blog.51cto.com/images/editer/InBlock.gif)
111 //if (Conn != null)
![](http://blog.51cto.com/images/editer/InBlock.gif)
112 //{
![](http://blog.51cto.com/images/editer/InBlock.gif)
113 // Conn.Dispose();//释放资源
![](http://blog.51cto.com/images/editer/InBlock.gif)
114 // Conn = null;
![](http://blog.51cto.com/images/editer/InBlock.gif)
115 //}
![](http://blog.51cto.com/images/editer/InBlock.gif)
116 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
117 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
118 }
![](http://blog.51cto.com/images/editer/InBlock.gif)
119}