[Transaction(TransactionOption.Required)]
public class StockThreading : ServicedComponent
可是這樣執行會報錯
沒有 MTS 物件內容 (發生例外狀況於 HRESULT: 0x8004E004)
public class StockThreading : ServicedComponent
可是這樣執行會報錯
沒有 MTS 物件內容 (發生例外狀況於 HRESULT: 0x8004E004)
解决方案 »
- dropdownlist和gridview 得到答案就结贴给分!
- 紧急求助这两段代码有什么错误
- 读取excel, 让用户选出的几个列,将数据导入到sql server,如何实现!
- 如何使用相对路径
- fastReport Studio 在VS2005中运行正常,发布后不能运行?
- 斑竹能翻译http://www.codeproject.com/aspnet/DATier.asp一下吗?急需!!!!
- 如何开发Web即时通讯功能
- 请问哪里有错
- 在左框架中点按钮,刷新右框架. 注意:是按钮button
- 各位高手。高分求救!当我动态增加RadioButton控件时,如何使所添加的RadioButton控件的RadioButton_CheckedChanged事件起作用?急!!!
- <input id="ceButton1" onclick="divoff()" />点击时没反应??
- 动态添加TextBox,ReadOnly为False时不能赋值的问题
这称为 local transaction,
但是如果有两个数据库连接对象开启了一个事务, 即使这两个连接使用的是一个相同的连接字符串, 连接本身也无能为力了, 这时事务不再时 local transaction 了, 开始带有分布式味道, 微软 DTS 就被启动用来管理这些分布式的事务了, 称为事务被 promoted 了, 或者说事务的 Escalation.
比如我测试时候的代码: string connectionString1 = "server=localhost;database=test;user id=test;password=test;enlist=true";
string connectionString2 = "User Id=scott; Password=tiger; Data Source=Apollo;enlist=true";
//string connectionString3 = "User Id=scott; Password=tiger; Data Source=Apollo;enlist=true";
// 这个 scope 下, 即使使用相同的连接字符, 创建多个连接, 事务还是会被 promote 的
using (TransactionScope tx = new TransactionScope())
{
DbProviderFactory fac = DbProviderFactories.GetFactory("Npgsql");
//DbProviderFactory fac = DbProviderFactories.GetFactory("System.Data.OracleClient");
using (DbConnection connection1 = fac.CreateConnection())
{
connection1.ConnectionString = connectionString1;
connection1.Open();
using (DbCommand command1 = connection1.CreateCommand())
{
command1.CommandText = "insert into dept (deptno) values (50)";
command1.ExecuteNonQuery();
}
//DbProviderFactory factory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client");
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OracleClient");
using (DbConnection connection2 = factory.CreateConnection())
{
connection2.ConnectionString = connectionString2;
connection2.Open();
using (DbCommand command2 = connection2.CreateCommand())
{
command2.CommandText = "insert into tablea (colb) values ('c')";
command2.ExecuteNonQuery();
}
}
}
tx.Complete();
}
分布式事务要求 ado.net provider 提供相关支持, 比如 oracle ado.net provier , 要支持分布式事务, 要求客户端安装 oracle MTS 组件.同时客户端的DTS 服务也要开启.com+ 事务, .net 事务, 在微软, 应该使用同样的底层机制,
0 楼的问题估计是 DTS 服务被禁用了, 可以通过组件服务查看器观测一下,
同时看看系统日志有啥详细信息提供.
謝謝Dobzhansky 先!
謝謝大家關注
請教一個問題
//創建事務
SqlTransaction transaction = connectionStock.BeginTransaction();
SqlTransaction transactionStockName = connection.BeginTransaction();using(TransactionScope scope = new TransactionScope())
{
try
{
stockorderbuyBLL.Add(transaction, o_test1Model);//新增操作(A數據庫的test1表)
stockordertempBLL.Modify(transaction, o_test2Model);//修改操作(B數據庫的test2表) socpe.Complete();
}catch
{
scope.Dispose();
}
}這樣執行事務 測試過沒事務效果 ????
請幫忙分析 我錯在哪里???
沒弄明白 學習中。
再次 謝謝 Dobzhansky
同樣歡迎大家有興趣討論、學習
stockorderbuyBLL.Add(transaction, o_test1Model);//新增操作(A數據庫的test1表)
stockordertempBLL.Modify(transactionStockName, o_test2Model);//修改操作(B數據庫的test2表)
对于 ado.net, 事务是数据库连接对上的一个属性,
位于事务 scope 内创建的连接会自动 enlist 到相应的事务中.你的两个连接是在外面创建的, 那个 using 块内的事务不管理它们.