zoukankan
html css js c++ java
ADO事务处理方式运行正常
/**/
///
<summary>
///
执行数据库事务
///
</summary>
///
<param name="dbConnStr">
数据库连接串,有多少个连接串就创建多少个事务
</param>
///
<param name="routineList">
事务代理数组,注意,可能会在一个事务中完成所有工作
</param>
public
static
void
DoTransaction(
string
[] dbConnStr,ITransactionRoutine[] routineList)
{
object
[] conn
=
new
object
[dbConnStr.Length];
object
[] trans
=
new
object
[dbConnStr.Length];
try
{
for
(
int
i
=
0
; i
<
dbConnStr.Length;i
++
)
{
SqlConnection connItem
=
new
SqlConnection(dbConnStr[i]);
conn[i]
=
connItem;
connItem.Open();
trans[i]
=
connItem.BeginTransaction();
}
for
(
int
i
=
0
;i
<
routineList.Length;i
++
)
{
ITransactionRoutine routine
=
routineList[i];
routine.Execute((SqlTransaction) trans[routine.TransIndex]);
}
foreach
(
object
obj
in
trans)
((SqlTransaction)obj).Commit();
//
提交所有事务
}
catch
(Exception ex)
{
foreach
(
object
obj
in
trans)
{
SqlTransaction transItem
=
(SqlTransaction)obj;
try
{
transItem.Rollback();
//
回滚所有事务
}
catch
(SqlException e)
{
if
(transItem.Connection
!=
null
)
{
Console.WriteLine(
"
An exception of type
"
+
e.GetType()
+
"
was encountered while attempting to roll back the transaction.
"
);
}
throw
e;
}
}
throw
ex;
//
最后不要忘记抛出来
}
finally
{
for
(
int
i
=
0
;i
<
conn.Length;i
++
)
//
释放所有数据库连接
{
SqlConnection connItem
=
(SqlConnection)conn[i];
if
(connItem
!=
null
)
connItem.Close();
connItem
=
null
;
}
}
}
/**/
///
<summary>
///
数据库事务操作接口
///
</summary>
public
interface
ITransactionRoutine
{
/**/
///
<summary>
///
所属的事务编号
///
</summary>
int
TransIndex
{
get
;
}
/**/
///
<summary>
///
执行 有异常就会弹出
///
</summary>
///
<param name="trans"></param>
void
Execute(SqlTransaction trans);
}
调用方式如下:
//
找到初始化站点的配置数据
IConfigurationElement[] pluginsConfigElems
=
null
;
IConfigurationElement[] catalogsConfigElems
=
null
;
IConfigurationElement[] rolesConfigElems
=
null
;
IConfigurationElement[] usersConfigElems
=
null
;
SetupConfigElems(
ref
pluginsConfigElems,
ref
catalogsConfigElems,
ref
rolesConfigElems,
ref
usersConfigElems);
//
第一步 创建站点数据
DBTrans.ITransactionRoutine routineSaveSiteInDB
=
new
RoutineSaveSiteInDB(m_siteMgr, m_site);
//
第二步 创建默认的分配模块
DBTrans.ITransactionRoutine routineAssignPlugins
=
new
RoutineAssignPlugins(m_site, pluginsConfigElems);
//
第三步 创建固定的应用目录
DBTrans.ITransactionRoutine routineCreateCatalogs
=
new
RoutineCreateCatalogs(m_site, catalogsConfigElems);
//
第四步 创建固定的角色,创建固定的用户,并分配到角色中,并且给角色分配目录权限
DBTrans.ITransactionRoutine routineCreateRoles
=
new
RoutineCreateRoles(m_site, rolesConfigElems, usersConfigElems);
DBTrans.ITransactionRoutine[] routineList
=
{
routineSaveSiteInDB,
routineAssignPlugins,
routineCreateCatalogs,
routineCreateRoles
}
;
try
{
DBTrans.DoTransaction(
new
string
[]
{dbConn}
,routineList);
}
catch
(ApplicationException ex)
{
result.Success
=
false
;
result.KernelMessage
=
ex.InnerException.Message;
}
return
result;
查看全文
相关阅读:
BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
BZOJ 2208: [Jsoi2010]连通数( DFS )
js效果-鼠标提示框
CSS-背景
CSS-文本
tomcat 安装 for Mac
CSS选择器基础
POJ3349-Snowflake Snow Snowflakes-Hash
数据库的三大设计范式
HDU5120-Intersection-两个圆环相交面积
原文地址:https://www.cnblogs.com/xiaotaoliang/p/440751.html
最新文章
POJ-1986-Distance Queries
HDU-2586-How far away(LCA Tarjan离线算法)
注意!
POJ 之 Hardwood Species
STL 之map解决 Message Flood(原字典树问题)
STL 之 map的用法
编程题目分类(剪辑)
树-堆结构练习——合并果子之哈夫曼树(其实是优先队列)
STL讲解报告
素数筛(自己需要记住的)
热门文章
反思
STL+位运算的文件
BZOJ 1816: [Cqoi2010]扑克牌( 二分答案 )
BZOJ 1449: [JSOI2009]球队收益( 最小费用最大流)
BZOJ 1497: [NOI2006]最大获利( 最大流 )
BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )
BZOJ 2761: [JLOI2011]不重复数字( )
BZOJ 1934: [Shoi2007]Vote 善意的投票( 最小割 )
BZOJ 1207: [HNOI2004]打鼹鼠( dp )
BZOJ 2748: [HAOI2012]音量调节( dp )
Copyright © 2011-2022 走看看