我正在尝试针对我的Sql 2000数据库为我的Linq-to-Sql操作设置一个简单的事务.使用TransactionScope它看起来像这样:
using (TransactionScope transaction = new TransactionScope()) { try { Store.DBDataContext dc = new Store.DBDataContext(); Store.Product product = GetProduct("foo"); dc.InsertOnSubmit(product); dc.SubmitChanges(); transaction.Complete(); } catch (Exception ex) { throw ex; } }
但是,我不断收到以下错误:
合作伙伴事务管理器已禁用其对远程/网络事务的支持.(来自HRESULT的异常:0x8004D025)
但是,如果我使用传统交易设置交易,它可以正常工作.所以这很好用:
Store.DBDataContext dc = new Store.DBDataContext(); try { dc.Connection.Open(); dc.Transaction = dc.Connection.BeginTransaction(); Store.Product product = GetProduct("foo"); dc.InsertOnSubmit(product); dc.SubmitChanges(); dc.Transaction.Commit(); } catch (Exception ex) { dc.Transaction.Rollback(); throw ex; } finally { dc.Connection.Close(); dc.Transaction = null; }
我想知道TransactionScope是否正在做一些与我的第二次实现不同的事情.如果没有,我没有使用TransactionScope失去了什么?此外,任何导致错误的指导都会很好.我已经确认MSDTC在sql server和我的客户机上运行.
看看这里:
System.Transactions和Microsoft SQL Server 2000的快速事务 http://blogs.msdn.com/florinlazar/archive/2005/09/29/475546.aspx
在这里:http:
//forums.microsoft.com/MSDN/ShowPost.aspx?PostID = 230390&SiteID = 1
首先验证"分发事务处理协调器"服务是否在数据库服务器计算机和客户端计算机上运行
1.转到"管理工具>服务"
2.如果未运行,请启用"分发事务处理协调器"服务如果它正在运行且客户端应用程序与数据库服务器不在同一台计算机上,则在运行数据库服务器的计算机上
1.转到"管理工具>组件服务"
2.在左侧导航树中,转到"组件服务>计算机" >我的电脑"(您可能需要双击并等待,因为某些节点需要时间来扩展)
3.右键单击"我的电脑",选择"属性"
4.选择"MSDTC"选项卡
5.单击"安全配置"
6 .确保选中"网络DTC访问","允许远程客户端","允许入站/出站","启用提示"(某些选项可能没有必要,尝试获取您的配置)
7.服务将重新启动
8.但如果它仍然无法工作,你可能需要重新启动你的服务器(这是让我疯狂的事情)在客户端计算机上使用相同的上述步骤打开"安全配置"设置,确保选中"网络DTC访问","允许入站/出站"选项,必要时重新启动服务和计算机.
在SQL服务器服务管理器上,单击"服务"下拉列表,选择"分发事务处理协调器",它也应该在您的服务器计算机上运行.