C# .NET事务中的VB6事务

C# .NET事务中的VB6事务,c#,wcf,vb6,C#,Wcf,Vb6,我有一个ASP.NET WCF Web服务,它从另一个服务获取数据,并通过事务将其保存在数据库中。i、 e.要么所有数据都保存在数据库中(提交),要么什么都不保存(回滚) 我需要在数据库中保存数据的过程中添加一个新的阶段,该阶段将调用VB6 dll中的函数,该dll还使用事务连接到同一数据库。可能吗 以下是用于调用VB6函数的.NET代码: object oMissing = System.Reflection.Missing.Value; ADODB.Recordset rsKR = new

我有一个ASP.NET WCF Web服务,它从另一个服务获取数据,并通过事务将其保存在数据库中。i、 e.要么所有数据都保存在数据库中(提交),要么什么都不保存(回滚)

我需要在数据库中保存数据的过程中添加一个新的阶段,该阶段将调用VB6 dll中的函数,该dll还使用事务连接到同一数据库。可能吗

以下是用于调用VB6函数的.NET代码:

object oMissing = System.Reflection.Missing.Value;
ADODB.Recordset rsKR = new ADODB.Recordset();
rsKR.Fields.Append("F1", ADODB.DataTypeEnum.adVarChar, 10, ADODB.FieldAttributeEnum.adFldFixed, null);
rsKR.Fields.Append("F2", ADODB.DataTypeEnum.adVarChar, 10, ADODB.FieldAttributeEnum.adFldFixed, null);

rsKR.Open(oMissing, oMissing, ADODB.CursorTypeEnum.adOpenStatic,    ADODB.LockTypeEnum.adLockOptimistic, -1);
rsKR.AddNew(oMissing, oMissing);

rsKR.Fields["F1"].Value = someObject.Id;
rsKR.Fields["F2"].Value = someObject.Name;

rsKR.Update(oMissing, oMissing);
rsKR.MoveFirst();

VB6Project.ClassAPI objVBAPI = new VB6Project.ClassAPI();
objVBAPI.InsertIntoDBFunction(rsKR);

提前感谢..

您需要做的是使用.Net
TransactionScope
对象包装您希望在异常情况下回滚的所有操作。您还需要确保VB6组件正在COM+服务中运行,并且启用了事务

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required,
        new TransactionOptions(), EnterpriseServicesInteropOption.Full))
{
    dotNetDatabaseOperations(); //call whatever .net code here
    comProxy.comMethod(); //call to your VB6 component with interop wrapper

    scope.Complete();
} //if any exception happens in either .net or COM,
  //entire transaction will be rolled back here

您需要做的是使用.Net
TransactionScope
对象包装所有在异常情况下要回滚的操作。您还需要确保VB6组件正在COM+服务中运行,并且启用了事务

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required,
        new TransactionOptions(), EnterpriseServicesInteropOption.Full))
{
    dotNetDatabaseOperations(); //call whatever .net code here
    comProxy.comMethod(); //call to your VB6 component with interop wrapper

    scope.Complete();
} //if any exception happens in either .net or COM,
  //entire transaction will be rolled back here

我曾尝试从.NET服务调用VB6 dll,但当VB6进入在数据库中插入数据的阶段时,我遇到异常。因此VB6 dll中的其他函数工作正常,当它尝试将数据插入数据库时,它会崩溃?是的,这正是启用VB6 DLL COM+时发生的情况?我讨厌复杂的计算,复杂的计算有多复杂?当然,它们不会如此复杂,以至于您无法将复杂的计算移植到.NET。谁知道呢,也许当你浏览它们的时候,你可以让它们变得不那么复杂?我试着从.NET服务调用VB6 dll,结果很好,但是当VB6进入到在数据库中插入数据的阶段时,我遇到了异常。所以VB6 dll中的其他函数工作正常,当它尝试将数据插入数据库时,它就失效了?是的,这正是启用VB6 DLL COM+时发生的情况?我讨厌复杂的计算,复杂的计算有多复杂?当然,它们不会如此复杂,以至于您无法将复杂的计算移植到.NET。谁知道呢,也许当你浏览它们的时候,你可以让它们变得不那么复杂?非常感谢你的回答,我漫长的一天刚刚结束,明天我会试试看,并给你反馈进展情况。祝你好运,请随意在这里添加任何后续问题,我会尽力帮助你。如果交易是从VB或VBA开始的,不在MTS中运行,这是可能的吗?非常感谢您的回答,我漫长的一天刚刚结束,明天我将尝试并向您反馈运行情况。祝您好运,请随时在此处添加任何后续问题,我将尝试提供帮助。如果事务是在VB或VBA中启动的,而不是在MTS中运行,是否可能?