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;
查看全文
相关阅读:
获取各种高度宽度方法总结
关于float、absolute,fixed谁的z-index大!
一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别
clientHeight的纠结之处
js和jq的获取元素偏移位置
js的一些使用
微信 ios的问题
jQuery事件之鼠标事件
遇到的问题
css
原文地址:https://www.cnblogs.com/xiaotaoliang/p/440751.html
最新文章
事务的四种属性
Java序列化
log的6种等级
面向对象三大特性
mySql安装时常见问题处理
保持高宽比
垂直居中
跨域
使用img标签显示用base64编码的验证码图片
indexDB 基础使用
热门文章
Ajax 请求问题:POST 请求将传出的参数放到请求body中
Web Worker
axios全局loading与实例loading
JavaScript生成RSA非对称秘钥
SHA256 · Hex加密
canvas需要在标签的属性里定义宽高
canvas自适应填满屏幕方法!!!
$(window).load(function(){}) 和 $(document).ready(function(){})的区别
程序员必备输入法设置——中文输入时使用英文标点
大坑啊!!!关于页面加载完毕事件!!!
Copyright © 2011-2022 走看看