- PR -

トランザクション状態の確認(MS SQL Server 7.0 + ADO)

1
投稿者投稿内容
toyopon
会議室デビュー日: 2006/03/06
投稿数: 2
投稿日時: 2006-03-06 14:55
VB 6.0 にて MS SQL Server 7.0 に ADO 接続している状態で以下のようなコードを実行した場合、Execute の実行で構文エラーが発生した場合など、勝手にトランザクションが
ロールバックされてしまう場合があるようですが、この時、ロールバックが行われたかどうかを調べる方法はあるのでしょうか?
--------------------------
cn.BeginTrans
While(...)
...
cn.Execute(sql)
...
Loop
cn.CommitTrans
--------------------------

また、強制的にロールバックが行われるエラーというのは、構文エラー以外に何かあるのでしょうか?

古い環境のお話で申し訳ありませんが、何かご存知の方がおられましたら、情報へのポインタだけでも教えて頂ければ幸いです。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-03-06 17:18
トランザクション開始からコミットまでの間にエラーが発生すれば、コミットされていない
トランザクションは自動的にロールバックされます。エラーが発生する原因は、構文エラーに
限らず様々な原因が考えられます。

このようなコーディングをする場合、VB6.0であれば、On Error GoToでエラー発生時の処理を
記述し、そこで明示的にロールバックをすべきです。また、エラー発生時点以前の更新について
コミットしたいのであれば、その更新ごとにコミットすべきでしょう。
toyopon
会議室デビュー日: 2006/03/06
投稿数: 2
投稿日時: 2006-03-08 16:55
回答ありがとうございます。

トランザクション中に発生したエラーは無視してコミットするような処理を行いたいと思っていますが、そんな事はできないですよね。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2006-03-08 17:37
引用:
トランザクション中に発生したエラーは無視してコミットするような処理を行いたいと思っていますが、そんな事はできないですよね。


それはトランザクションとは呼ばないのでは?

トランザクションの粒度は自分で決められます。1トランザクション = 1ステートメント にしたらいいんじゃないですか? SQL Server の既定は、そのように振舞う自動コミットモードになってますし。わざわざ、明示的にトランザクションを開始しなければいいだけだと思います。
1

スキルアップ/キャリアアップ(JOB@IT)