我正在将一些代码从VB6转换为VB.Net,其中包含以下几个实例:
Private m_myobj As ObjectContext
m_myobj = GetObjectContext()
' do stuff, then
m_myobj.SetAbort()
' or
m_myobj.SetComplete()借助于包含对System.Data、System.Data.Entity和Imports System.Data.Object的引用,我设法使声明得以编译,但其他人到目前为止都拒绝这样做。显示的错误包括:-
'GetObjectContext' is not declared. It may be inaccessible due to its protection level
'SetComplete' is not a member of 'System.Data.Objects.ObjectContext'
'SetAbort' is not a member of 'System.Data.Objects.ObjectContext'从文档中可以看出,这两个方法实际上并不存在,但它们(可能)在VB6中是有效的。有人知道我应该怎么做吗?
发布于 2013-05-02 02:36:01
SetAbort和SetComplete方法是对运行类的COM+ (曾经称为MTS)应用程序的调用,并允许部分代码投票决定分布式数据库事务是否将由com+环境提交。您需要查看代码路径,看看代码是否是必需的。如果是这样,您将需要研究跨多个DB访问扩展数据库事务的其他方法。在我的经验中,人们有时会对这项技术感到兴奋,并不必要地实现它,很有可能你可以直接删除代码。
复制此功能的最简单方法是保持一个开放的连接,并适当地调用begintran和endtran,但这类东西往往会变得复杂。
我认为现代微软最接近的等价物是Entity Framework。
发布于 2013-05-02 00:41:44
GetObjectContext是一个窗口函数。您可以使用P/Invoke声明它,如下所示:
<DllImport("ComSvcs.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Shared Function GetObjectContext(<Out> ByRef pCtx As IObjectContext) As Integer
End Function
<ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("51372AE0-CAE7-11CF-BE81-00AA00A2FA25")> _
Public Interface IObjectContext
Function CreateInstance(ByVal rclsid As Guid, ByVal riid As Guid) As Object
Sub SetComplete()
Sub SetAbort()
Sub EnableCommit()
Sub DisableCommit()
<PreserveSig> _
Function IsInTransaction() As Boolean
<PreserveSig> _
Function IsSecurityEnabled() As Boolean
Function IsCallerInRole(<MarshalAs(UnmanagedType.BStr)> ByVal role As String) As Boolean
End Interfacehttps://stackoverflow.com/questions/16320098
复制相似问题