如何对几个不同的数据库同时做事务处理 我在做一个项目时,需要对数据库数据进行同步,初拟是三个数据库,数据库类型不同,如何才能在对三个数据库同时做操作时进行事物处理 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 static void Main(string[] args) { SqlConnection sqlConn = new SqlConnection( ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString); SqlTransaction sqlTrans = null; try { sqlConn.Open(); sqlTrans = sqlConn.BeginTransaction();//事务开始 SqlCommand sqlComm = new SqlCommand("", sqlConn, sqlTrans); sqlComm.CommandTimeout = 120; sqlComm.CommandType = System.Data.CommandType.Text; string insertSql = "insert into dbo.TransTestTable values (66,'66');"; string updateSql = "update dbo.TransTestTable set [Name] = '77' where [Id] = 66;"; sqlComm.CommandText = insertSql; sqlComm.ExecuteNonQuery();//执行insert sqlComm.CommandText = updateSql; sqlComm.ExecuteNonQuery();//执行update //throw new Exception("test exception.the transaction must rollback"); sqlTrans.Commit();//事务提交 } catch (Exception ex) { sqlTrans.Rollback();//事务回滚 Console.WriteLine(ex.Message); } finally { if (sqlConn.State != System.Data.ConnectionState.Closed) sqlConn.Close(); } Console.ReadLine(); } 你在SERVICE层加上事物 在调用3个不同数据库的DAO的时候抓异常 有异常抛出就可以回滚了 跨数据库的事务是事务最高级、最复杂的应用,在 JAVA 环境中需要带有 JTA 事务的 J2EE 容器中才能做到,并且那三个数据库必须支持 XA 事务。 4楼说法正确!tomcat容器现在不支持! 分布式事务使用两阶段提交协议,也就是通常所称的“2-PC”具体的可以看看这个帖子:http://topic.csdn.net/u/20100521/11/04b05a96-30e5-4356-9675-72111bfb9df3.html我只能跟你说在 J2EE 容器中如何用 JTA 来处理分布式事务了。1:在 J2EE 的 JNDI 上创建那三个数据库的 javax.sql.DataSource手工处理事务的话:2:从 J2EE 的 JNDI 上获得 javax.transaction.UserTransaction 对象3:操作数据库,使用 UserTransaction 对象进行事务处理让容器自动管理的话:2:在 Session Bean 的相关方法上标注 @TransactionAttribute(TransactionAttributeType.REQUIRED) 就可以了。 那请问 什么容器支持jta呢?websphere 5.1支持么 关于geoserver的疑问 留言系统注册失败问题 关于两组文件上传的问题 天际诚聘 在用response.sendRedirect()时,如何避免出现java.lang.IllegalStateException异常 初学jsp,看过一些书及代码,想找功能不算复杂,但是对初学jsp有较大提高的例子来学习?希望大家推荐几个! tomcat使用 java 解析apk的AndroidManifest.xml文件获取apk启动类 谁能帮我找出这个毛病? 修改本地域名相关问题 js 自定义对话框 页面中可能多个条件搜索数据库时,后台要怎么写?
static void Main(string[] args)
{ SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
SqlTransaction sqlTrans = null;
try
{
sqlConn.Open();
sqlTrans = sqlConn.BeginTransaction();//事务开始
SqlCommand sqlComm = new SqlCommand("", sqlConn, sqlTrans);
sqlComm.CommandTimeout = 120;
sqlComm.CommandType = System.Data.CommandType.Text; string insertSql = "insert into dbo.TransTestTable values (66,'66');";
string updateSql = "update dbo.TransTestTable set [Name] = '77' where [Id] = 66;"; sqlComm.CommandText = insertSql;
sqlComm.ExecuteNonQuery();//执行insert sqlComm.CommandText = updateSql;
sqlComm.ExecuteNonQuery();//执行update
//throw new Exception("test exception.the transaction must rollback"); sqlTrans.Commit();//事务提交
}
catch (Exception ex)
{
sqlTrans.Rollback();//事务回滚
Console.WriteLine(ex.Message);
}
finally
{
if (sqlConn.State != System.Data.ConnectionState.Closed)
sqlConn.Close();
} Console.ReadLine();
}
2:从 J2EE 的 JNDI 上获得 javax.transaction.UserTransaction 对象
3:操作数据库,使用 UserTransaction 对象进行事务处理让容器自动管理的话:
2:在 Session Bean 的相关方法上标注 @TransactionAttribute(TransactionAttributeType.REQUIRED) 就可以了。