2012-01-09 2 views
2

レガシーVB6アプリケーションをSybaseバックエンドからSQL Server 2008 R2に移行中です。ほとんどのアプリケーションが移行を進めていますが、名前付きトランザクションを使用してコード内から厳密なトランザクション制御を使用する1つのアプリケーションがあります。いくつかの徹底的なテストに基づいて、クライアントまたはサーバーは、「開始」、「コミット」、および「ロールバック」コマンドをまったくサポートしていないように見えます。レガシーVB6アプリケーション用のADODBでのトランザクションのサポート

このようなコマンドの実行:

conSQL.Execute "begin tran CaptureSch" ', , adExecuteNoRecords 

をしてから@@ TRANCOUNTとそれに続くことは常にトランザクションをコミットするのいずれかの試みが、後のコードで3902エラーが発生しさらに0を生成します。このコマンドを使用

conSQL.BeginTrans 

しかし@@ TRANCOUNTはまだゼロであり、このメソッドはにより必要とされるものである、ネストされたトランザクションをサポートしていないだろう、行動変化のいくつかの並べ替えを得るために表示されていますコード。

暗黙的なトランザクションモード、さまざまな接続文字列パラメータなどを変更しようとしました。このタイプの機能をどのように動作させるかについての提案はありますか?オンラインで見つけられるこの種の機能のサンプルは、コード内で明示的に実行されるとネストされた名前付きトランザクションがサポートされることを示唆しています。

ありがとうございました。あなたはすでにこれを発見していない念の

答えて

1

INFO: Understanding ADO Transactions with MS SQL Server

をただし、記事の予想される動作は、ここで報告されているものと一致していないようです。

また、ADO接続方法BeginTransは、this MSDN articleで確認されているように、実際にネストされたトランザクションをサポートしています。使用しているOLE DBプロバイダがネストされたトランザクションもサポートしているかどうかは別の問題です。この中

rec.Open test_query, cn, adOpenStatic, adLockReadOnly 

ので:

0

さて、あなたはVBでフェッチカーソル(の少なくとも1種)を使用した場合、テストの束の後、結局のところ、すべてのトランザクションに関連する状態を捨てるように見えますこのステートメントのadOpenStatic CursorTypeを削除すると、トランザクションコントロール(begin tran、commit tranなど)が再び機能し始めます。私はリターンレコードセットのナビゲーションで他にどのような選択肢があるか検討していますが、テストアプリでこのバグ/問題の繰り返しを行うことができます。

この投稿にも投稿されました: http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/4933d0b0-d4a1-4692-851a-ef7a8be7b966

関連する問題