0

当程序尝试访问水果数据库时,我遇到了挂起。我已经在我的开发计算机和 SQL Server 服务器上启用了网络访问 MSDTC。

代码:(请原谅代码着色......所以误解了我的 VB .NET)

Using ts As New TransactionScope
            Dim fruit As New FruitDataContext
            Dim thingies As New ThingiesDataContext
            If (From f In fruit.tblApples Where f.Rotten = "Yes" AndAlso f.batch = 1).Count >= 1 Then
                'Record today's date as the day that the rotten apples were dumped.
            End If

            'Other complicated code that uses ThingiesDataContext and FruitDataContext

            du.SubmitChanges()
            ts.Complete()
End Using

编辑:

我又挖了一点,结果发现问题出在 LINQ 行。当我尝试使用 LINQ to SQL Visualizer 查看它时,我收到以下错误:

System.InvalidCastException: Specified cast is not valid.
   at LinqToSqlQueryVisualizer.SqlQueryInfo.deserialize(Stream stream)
   at LinqToSqlQueryVisualizer.Visualizer.Display(IDialogVisualizerService windowService, Stream rawStream)
   at LinqToSqlQueryVisualizer.DialogChooser.Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
   at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.ManagedShim.DelegatedHost.CreateViewer(IntPtr hwnd, HostServicesHelper hsh, SafeProxyWrapper proxy)

我还编辑了 LINQ 语句以更接近我的真实代码。

最终编辑:我尝试使用普通的 SqlConnection 而不是“thingies as New ThingiesDataContext”,但问题仍然存在。

TransactionScope 似乎无法处理同一事务中的多个 SQL 连接。

微软官方笔记

SQL Server 不支持并行事务。

来自 MSDN:http: //msdn.microsoft.com/en-us/library/bb896149.aspx

4

1 回答 1

1

这不是 MSDTC 问题。如果是这样,您会收到一条错误消息,指出 DTC 未启用并且需要启用。这也不是一个死锁问题,因为你也会得到一个特定的错误。

如果我不得不猜测,我会说“其他复杂代码...”正在尝试执行数据库操作并且被一个或其他数据库上下文对象阻止。

确定这一点的一种方法是运行 SQL Profiler 以查看服务器上实际执行的 SQL 语句,并检查块。

于 2010-03-17T01:58:46.437 回答