0

プログラムがフルーツデータベースにアクセスしようとすると、ハングが発生します。開発用コンピューターとSQLServerサーバーの両方でネットワークアクセスMSDTCを既に有効にしています。

コード:(コードの色付けはご容赦ください...SOが私の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ステートメントを編集して実際のコードに近づけました。

最終編集:「thingiesas New ThingiesDataContext」の代わりに通常のSqlConnectionを使用しようとしましたが、それでも問題は発生します。

TransactionScopeは、同じトランザクション内で複数のSQL接続を処理できないようです。

公式MicrosoftNote

並列トランザクションはSQLServerではサポートされていません。

MSDNから:http://msdn.microsoft.com/en-us/library/bb896149.aspx

4

1 に答える 1

1

これはMSDTCの問題ではありません。有効になっている場合は、DTCが有効になっていないため、有効にする必要があるというエラーが表示されます。また、デッドロックの問題でもありません。これについても特定のエラーが発生するためです。

推測しなければならない場合、「その他の複雑なコード...」はデータベース操作を実行しようとしており、いずれかのデータベースコンテキストオブジェクトによってブロックされていると言えます。

これを判断する1つの方法は、SQL Profilerを実行して、サーバーで実際に実行されているSQLステートメントを確認し、ブロックを確認することです。

于 2010-03-17T01:58:46.437 に答える