Da VB und .NET verschiedene SQL-Verbindungen verwenden (und es keine Möglichkeit gibt, ADO und ADO.NET für die gleiche Verbindung freizugeben) besteht die einzige Möglichkeit darin, das DTC (Distributed Transaction Coordinator) zu registrieren. Das DTC wird die zwei unabhängigen Transaktionen koordinieren, so dass sie zusammenkommen oder zusammen zurückgesetzt werden.
Von .NET verwaltet EnterpriseServices COM + -Funktionalität wie den DTC. In .NET 2.0 und forward können Sie den System.Transactions-Namespace verwenden, der die Dinge ein wenig schöner macht. Ich denke, so etwas wie dies sollte (ungetestet Code) arbeiten:
void SomeMethod()
{
EnterpriseServicesInteropOption e = EnterpriseServicesInteropOption.Full;
using (TransactionScope s = new TransactionScope(e))
{
MyComPlusClass o = new MyComPlusClass();
o.SomeTransactionalMethod();
}
}
Ich bin nicht vertraut genug mit diesem Ihnen mehr Beratung an dieser Stelle zu geben.
Auf der COM + -Seite muss Ihr Objekt konfiguriert werden, um eine verteilte Transaktion zu verwenden (wahrscheinlich "erforderlich"). Sie können dies von COM + Explorer aus tun, indem Sie Eigenschaften Ihres Objekts gehen, die Transaktion Registerkarte auswählen, und klicken Sie auf "Erforderlich". Ich kann mich nicht erinnern, ob du das auch aus Code machen kannst; VB6 wurde erstellt, bevor COM + veröffentlicht wurde, also unterstützt es nicht alles, was COM + tut (seine transaktionale Unterstützung war für den Vorgänger von COM +, genannt MS Transaction Server, gedacht).
Wenn alles ordnungsgemäß funktioniert, sollte Ihr COM + -Objekt in den vorhandenen Kontext, der von Ihrem .NET-Code erstellt wurde, aufgenommen werden.
Sie können den Knoten "Distributed Transaction Coordinator \ Transaction List" in "Komponentendienste" verwenden, um die verteilte Transaktion, die während des Aufrufs erstellt wird, zu überprüfen und anzuzeigen.
Beachten Sie, dass die Änderungen der COM + -Komponente, die sich auf Datenabfragen von der .NET-Seite widerspiegeln, erst sichtbar werden, wenn die Transaktion festgeschrieben ist! In der Tat ist es möglich, zu blockieren! Denken Sie daran, dass DTC sicherstellen wird, dass die beiden Transaktionen gepaart sind, aber sie sind immer noch separate Datenbanktransaktionen.