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;
查看全文
相关阅读:
6、方法
5、封装
4、循环
3、判断
2、基本语法
1、基本框架
CodeForces 681C Heap Operations(模拟)
CodeForces 682C Alyona and the Tree(广搜 + 技巧)
URAL 2099 Space Invader题解 (计算几何)
HDU 5833 (2016大学生网络预选赛) Zhu and 772002(高斯消元求齐次方程的秩)
原文地址:https://www.cnblogs.com/xiaotaoliang/p/440751.html
最新文章
Sqli-labs
Python简易 爬虫+图形化界面(2020/7/5已更新)
ATT&CK实战系列
Python爬虫+可视化图形库Pyecharts
[极客大挑战 2019]
ATT&CK实战系列
组合选择器
CSS三种引入方式 常用样式 CSS选择器
前端三剑客 页面模板 HTML标签
mysql 视图 事务 存储过程 SQL注入
热门文章
mysql 用户管理 pymysql模块
记录操作 子查询 三表联查
约束 级联
数据库引擎 表详情 数据类型
数据库概念 MySQL 库操作 表操作 记录操作
进程池,线程池 协程
指令
IP编制
传输介质简介
类
Copyright © 2011-2022 走看看