咨询一个sql事务问题

foxd 2015-06-18 10:15:10
一般调用sql事务处理时可以使用以下的模式来做,用getcon()语句连接一个数据库并把两条或多条sql语句用分号分隔写在sqlstr中去执行。但如果有两条sql语句(如:select * from tb_data1; delete from tb_data2),分别操作的是不同的数据库,前一条用getcon();连接一个数据库,后一条用getcon1();连接另一个数据库,应该怎样写事务处理语句呢?谢谢!
bool RunTransaction(string sqlstr)
{
SqlConnection conn = this.getcon();
conn.Open();
SqlTransaction st = conn.BeginTransaction();
SqlCommand com = conn.CreateCommand();
com.Transaction = st;
try
{
com.CommandText = sqlstr;
com.ExecuteNonQuery();
st.Commit();
return true;
}
catch (Exception ex)
{
st.Rollback();
return false;
}
}
...全文
157 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
风吹腚腚凉 2015-06-19
  • 打赏
  • 举报
回复
引用 6 楼 lovelj2012 的回复:
[quote=引用 3 楼 wjfwd2010 的回复:] [quote=引用 2 楼 sp1234 的回复:] 在.net framework中没有跨数据库系统的事务机制。TransactionScope是丢给你自己去实现的,它只是提供一个空壳子,所以仅仅使用它而你自己不能发明它所需要的所有底层重构代码,其实是毫无意义的。 在.net framework中没有跨数据库事务。我们的做法是使用业务逻辑流程来解决。而不是仅基于现成的技术,也就是说不要去考虑简单的数据库事务语句来加什么“锁”。
举个例子呗,往两个数据里 插入一条数据,怎么确保数据的一致性? 业务逻辑流程怎么控制?[/quote] 看csdn的例子TransactionScope 不同库,各自的连接字符串,构造连接对象 使用
using (TransactionScope scope = new TransactionScope())
        {
//不同数据库操作
}
作为框架,统一提交(scope.Complete();)或者回滚 [/quote] 我是说的业务逻辑控制。
江南小鱼 2015-06-19
  • 打赏
  • 举报
回复
引用 3 楼 wjfwd2010 的回复:
[quote=引用 2 楼 sp1234 的回复:] 在.net framework中没有跨数据库系统的事务机制。TransactionScope是丢给你自己去实现的,它只是提供一个空壳子,所以仅仅使用它而你自己不能发明它所需要的所有底层重构代码,其实是毫无意义的。 在.net framework中没有跨数据库事务。我们的做法是使用业务逻辑流程来解决。而不是仅基于现成的技术,也就是说不要去考虑简单的数据库事务语句来加什么“锁”。
举个例子呗,往两个数据里 插入一条数据,怎么确保数据的一致性? 业务逻辑流程怎么控制?[/quote] 看csdn的例子TransactionScope 不同库,各自的连接字符串,构造连接对象 使用
using (TransactionScope scope = new TransactionScope())
        {
//不同数据库操作
}
作为框架,统一提交(scope.Complete();)或者回滚
江南小鱼 2015-06-19
  • 打赏
  • 举报
回复
引用 楼主 foxd 的回复:
一般调用sql事务处理时可以使用以下的模式来做,用getcon()语句连接一个数据库并把两条或多条sql语句用分号分隔写在sqlstr中去执行。但如果有两条sql语句(如:select * from tb_data1; delete from tb_data2),分别操作的是不同的数据库,前一条用getcon();连接一个数据库,后一条用getcon1();连接另一个数据库,应该怎样写事务处理语句呢?谢谢!
事务不能跨数据库! 你测试下下面的方式,应该是不行
select * from 数据库服务器1..tb_data1; delete from 数据库服务器2..tb_data2
chenfazong 2015-06-18
  • 打赏
  • 举报
回复
用 TransactionScope即可。 .net 用的是Windows的分布式事务处理 DTC,多数据库保持事务完整性,毫无问题。 具体用法看帮助 using(var scope = new TransactionScope() { .... scope.Complete(); } 这个正是.net 处理分布式事务的优势。
风吹腚腚凉 2015-06-18
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
在.net framework中没有跨数据库系统的事务机制。TransactionScope是丢给你自己去实现的,它只是提供一个空壳子,所以仅仅使用它而你自己不能发明它所需要的所有底层重构代码,其实是毫无意义的。 在.net framework中没有跨数据库事务。我们的做法是使用业务逻辑流程来解决。而不是仅基于现成的技术,也就是说不要去考虑简单的数据库事务语句来加什么“锁”。
举个例子呗,往两个数据里 插入一条数据,怎么确保数据的一致性? 业务逻辑流程怎么控制?
  • 打赏
  • 举报
回复
在.net framework中没有跨数据库系统的事务机制。TransactionScope是丢给你自己去实现的,它只是提供一个空壳子,所以仅仅使用它而你自己不能发明它所需要的所有底层重构代码,其实是毫无意义的。 在.net framework中没有跨数据库事务。我们的做法是使用业务逻辑流程来解决。而不是仅基于现成的技术,也就是说不要去考虑简单的数据库事务语句来加什么“锁”。
smthgdin_020 2015-06-18
  • 打赏
  • 举报
回复
分布式事务就行。或者使用连接服务器。

110,567

社区成员

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

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

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