質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

解決済

「トランザクションの状態に対して操作が有効ではありません」が発生します

unkei73
unkei73

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

2回答

0評価

1クリップ

108閲覧

投稿2017/08/23 07:06

###前提・実現したいこと
VB.netで作成したアプリをWindowsサービスで起動しています。
ソケット通信で受信してDB(SQL Server)にデータを登録しています。
DB接続はTableAdapterを使っています。

あるタイミングからデータ取得(Fill)で「トランザクションの状態に対して操作が有効ではありません」という例外エラーが発生するようになりました。
それまでは正常に動作していたのですが、エラーが出始めてからは100%発生しています。

トランザクションはTracsactionScopeを使用していますが、ある特定のテーブルのみで発生します。
そのテーブルのデータ取得までには他のテーブルにも接続していますが、
エラーは発生しません。

どういったことが考えられるでしょうか?

###発生している問題・エラーメッセージ

場所 System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction tx, IPromotableSinglePhaseNotification promotableSinglePhaseNotification, Transaction atomicTransaction) 場所 System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification) 場所 System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx) 場所 System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx) 場所 System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction) 場所 System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) 場所 System.Data.ProviderBase.DbConnectionPool.PrepareConnection(DbConnection owningObject, DbConnectionInternal obj, Transaction transaction) 場所 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) 場所 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) 場所 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) 場所 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 場所 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 場所 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) 場所 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) 場所 System.Data.SqlClient.SqlConnection.Open() 場所 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) 場所 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) 場所 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) トランザクションの状態に対して操作が有効ではありません

###該当のソースコード

vb

'トランザクション開始 Dim TOption As New TransactionOptions() TOption.IsolationLevel = Transactions.IsolationLevel.ReadCommitted TOption.Timeout = TransactionManager.DefaultTimeout Using ts As New System.Transactions.TransactionScope(TransactionScopeOption.Required, TOption) ・・・ 'データ取得(ここまでに他のテーブルのデータは取得できている) Dim tableAdapter As New TestDataSetTableAdapters.TestTableAdapter Dim dataTable As New TestDataSetTable.TestDataTable tableAdapter.Fill(dataTable) ←ここでエラー ・・・ ts.Complete() End Using

###試したこと
アプリもテーブル定義も変わってませんが急にエラーとなりました。
DB再起動は本番環境のためできていません。
DB等をテスト環境に復元しても再現はしません。
問題のテーブルはこのアプリしか接続しておらず、ロックが発生しているか
調べましたが、特に原因となりそうなものが見つかりません。
処理が始まってからエラーが発生するまで2分ほどかかっており、
タイムアウトしているようにも思います。

###補足情報(言語/FW/ツール等のバージョンなど)
Windows 2012 Server
SQL Server2012
.Net FrameWork 4.5

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。