%%^^^^^^^^关于数据库事务问题^^^^^^^^^%%

nik_Amis 2008-06-16 01:53:26
我的程序框架是采用的Common+Objects+DataAccess+Bussiness+Web UI的结构
Common里面提供了DataEngine单件模式的静态数据库操作类
每次Business类操作数据库都直接调用DataEngine.Instance.ExecuteSQL(sSQL)方法
使用的时候是没有问题的

但是我现在的问题是我要加上事务的调用,发现好像有很大的问题
据我所知实现事务有三种方式
1.MS MTS
2.C#的Connection.BeginTrans(类似于早期的ADO.BeginTrans())
3.调用SQL语句"BEGIN TRANS "

1对MTS我是没有任何好感,COM+时代做这些破东西太恶心了,现在也不知道.Net是否很好的支持这些玩意儿;
2发现无法组合多个数据库操作进行事务
因为每次Business类操作SQL语句实际上都是调用DataEngine.Instance.ExecuteSQL()去重新创建一个连接,不在一个连接里面无法实现多条SQL语句的事务。
3没有实际项目中用过,而且我试过不在一个连接里面调用这个事务好像也不行;


所以我想请教一下大家,有什么好的办法?不知道我表达清楚了没有呵呵

有好的解决方案单独在给200分
...全文
190 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
me_nu456 2008-06-18
  • 打赏
  • 举报
回复
shadowgreen 2008-06-18
  • 打赏
  • 举报
回复
不懂啊~!
帮顶~
nik_Amis 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 bejon 的回复:]
access好像不支持事务
[/Quote]
??
阿牛138588 2008-06-17
  • 打赏
  • 举报
回复
access好像不支持事务
足球中国 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 amandag 的回复:]
因为每次Business类操作SQL语句实际上都是调用DataEngine.Instance.ExecuteSQL()去重新创建一个连接,不在一个连接里面无法实现多条SQL语句的事务。
==
使用存储过程封装事务的逻辑
[/Quote]
nik_Amis 2008-06-17
  • 打赏
  • 举报
回复
谢谢你的建议,你和楼上一位兄弟说的关于SP的优越性

你的帖子我看了,之前我写过一些程序跟你写的那个差不多,事物可以很容易的使用
但是这次这个程序架构不一样了,数据库连接这块是个单件静态模式的,每次执行SQL都是重新创建connection
所以我比较头疼。也许我的这个框架有问题。。。

Ki1381 2008-06-17
  • 打赏
  • 举报
回复
存储过程还是有很多优越性的,建议不要盲目抵制:D

至于事务,以前我也问过类似的问题,http://topic.csdn.net/u/20070317/07/a0afad5f-6401-4bdf-a5bd-9158aff1f571.html,不知道对你是不是有帮助
nik_Amis 2008-06-17
  • 打赏
  • 举报
回复
呵呵,你说啥了?。。。。

不过谢谢你顶
SuperTyro 2008-06-17
  • 打赏
  • 举报
回复
学习下!

我是小菜鸟! 说的不好清见谅, 希望能够帮到你!
nik_Amis 2008-06-17
  • 打赏
  • 举报
回复
字少了还不能回复。。。。。。。。。。。。。。。。。。。。。
nik_Amis 2008-06-17
  • 打赏
  • 举报
回复
OK谢谢,我去试试
麻痹的沙比CSDN,非要刷屏才能回复?!
fuadam 2008-06-17
  • 打赏
  • 举报
回复
可以,支持不同的数据库,数据源
nik_Amis 2008-06-17
  • 打赏
  • 举报
回复
.net 2.0/sql 2000

你说的可以在不同的连接里面实现么?
fuadam 2008-06-17
  • 打赏
  • 举报
回复
你用的是.net 2.0吗,用这个
using(System.Transactions.TransactionScope tran = new System.Transactions.TransactionScope())
{
//操作数据库的函数,不用显示写tran
}
你如果用的sql2005性能和使用System.Data.IDbTransaction的性能是一样的,sql2000走分布式事务,性能有损失,不过这个确实用起来方便
menu_789 2008-06-17
  • 打赏
  • 举报
回复
YJDP0918 2008-06-16
  • 打赏
  • 举报
回复
看不懂。。。UP一个。。
laoyingisme 2008-06-16
  • 打赏
  • 举报
回复
关注ING
wzy_love_sly 2008-06-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 nik_Amis 的回复:]
我基本上不用存储过程,不喜欢那玩意儿,全部都是SQL 语句
[/Quote]
小,并发少,多了马上不行
sxmonsy 2008-06-16
  • 打赏
  • 举报
回复
用存储过程.这样做好点感觉.
XPingguo 2008-06-16
  • 打赏
  • 举报
回复
加一些方法,随便写的,没测试。

public static bool ExecuteTransaction(string[] arraySql)
{
SqlConnection conn = new SqlConnection(sqlConnection);
conn.Open();
SqlTransaction transaction = conn.BeginTransaction("Test");
try
{
for(int i = 0; i < arraySql.Length; i++)
{
DataEngine.Instance.ExecuteSQL(transaction, arraySql[i]);
}
transaction.Commit();
conn.Close();
}
catch
{
try
{
transaction.Rollback();
}
catch
{

}
conn.Close();
return false;
}
return true;
}

// 共用 transaction 中的连接
public static int ExecuteSQL(SqlTransaction transaction, string sql)
{
SqlCommand command1 = new SqlCommand();
command.Connection = transaction.Connection;
command.CommandText = sql;
command.Transaction = transaction;
command.CommandType = CommandType.Text;
return command1.ExecuteNonQuery();
}
加载更多回复(14)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧