由於VB和.NET將使用不同的SQL連接(並且無法使ADO和ADO.NET共享相同的連接),因此唯一的可能性是爭取DTC(分佈式事務協調器)。 DTC將協調兩個獨立的交易,以便他們提交或回滾到一起。
從.NET,EnterpriseServices管理COM +功能,如DTC。在.NET 2.0和轉發中,你可以使用System.Transactions命名空間,它使事情變得更好一些。我覺得這樣的事情應該工作(未經測試的代碼):
void SomeMethod()
{
EnterpriseServicesInteropOption e = EnterpriseServicesInteropOption.Full;
using (TransactionScope s = new TransactionScope(e))
{
MyComPlusClass o = new MyComPlusClass();
o.SomeTransactionalMethod();
}
}
我不是這個再熟悉不過了,給你在這一點上更多的建議。
在COM +端,您的對象需要配置爲使用(最有可能「要求」)分佈式事務。您可以通過轉到對象的屬性,選擇交易選項卡,然後單擊「必需」,從COM +資源管理器中執行此操作。我不記得你是否也可以從代碼中做到這一點; VB6是在COM +發佈之前創建的,所以它不能完全支持COM +所做的一切(其事務支持是爲COM +的前身命名的,即MS Transaction Server)。
如果一切工作正常,您的COM +對象應該參與由您的.NET代碼創建的現有上下文。
您可以使用「組件服務」中的「分佈式事務協調器\事務列表」節點來檢查並查看在調用期間創建的分佈式事務。
請注意,您看不到從.NET側的數據查詢反映的來自COM +組件的更改,直到事務提交爲止!事實上,這是可能的僵局!請記住,DTC將確保這兩個事務是成對的,但它們仍然是單獨的數據庫事務。