- PR -

COMMITとROLLBACKの方法

1
投稿者投稿内容
ミキ
常連さん
会議室デビュー日: 2006/01/12
投稿数: 28
投稿日時: 2007-04-10 09:24
こんにちわ。
AccessとVBをちょっとかじったことのあるPGです。
ただ今、「Visual C# 2005」の勉強中であります。
先日ようやくSQL文を発行してデータベース(MDB)を更新することができるようなりました(ここまで来るのに一週間かかりました^^
↓とりあえずこの記述で処理は成功しました。

using System.Data.OleDb;
string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Data Source=D:\\kamoku.mdb";
OleDbConnection cn = new OleDbConnection(connectString);
cn.Open();
string strSQL = "UPDATE 科目マスタテーブル SET 金額 = 500 WHERE 科目コード = '0001'";
OleDbCommand cmd = new OleDbCommand(strSQL, cn);
OleDbDataReader reader = cmd.ExecuteReader();

これにCOMMIT、ROLLBACKの記述を足したいのですが、それが分かりません(;
HELPや参考書、ネットで調べましたが、なぜかどうしても見つけることができません(;
初歩的なことで甚だ恐縮ですが、どなたかご教授くださいませm(__)m
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-04-10 09:44
MSDN ならこのあたりに書いてあります。

CommittableTransaction を使用した明示的なトランザクションの実装

トランザクション スコープを使用した暗黙的なトランザクションの実装
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2007-04-10 11:16
こういう問題もあります。

  登録したはずのデータが消える

#リンク内にトランザクションの記述あり。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-04-11 21:11
引用:

KIさんの書き込み (2007-04-10 09:44) より:
MSDN ならこのあたりに書いてあります。

CommittableTransaction を使用した明示的なトランザクションの実装

トランザクション スコープを使用した暗黙的なトランザクションの実装


mdbでTransactionScopeって使えるんですか?
いや、よく知らないだけなんですが…
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-04-11 22:57
引用:

なちゃさんの書き込み (2007-04-11 21:11) より:

mdbでTransactionScopeって使えるんですか?
いや、よく知らないだけなんですが…


私も試したことはないので、はっきりしたことはわかりません。
とはいえ、使えない理由も特に思いつきませんが…
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2007-04-12 09:43
 Accessで分散トランザクション?

引用:
ミキさんの書き込み (2007-04-10 09:24) より:

COMMIT、ROLLBACKの記述を足したい


コード:
    OleDbTransaction trn;

    try
    {
        trn = cn.BeginTransaction();

        reader = cmd.ExecuteReader();

        trn.Commit();
    }
    catch
    {
        trn.Rollback();
    }
    finally
    {
        cn.Close();
    }

↑こういう話ではなくて?
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-04-12 11:51
すみません。やっぱり TransactionScope は使えないようです。

試しにやってみたら、TransactionScope のブロック内での、
OleDbConnection.Open で InvalidOperationException が発生しました。
(VS2005 C#, ACCESS 2000で確認)
例外メッセージは以下の通り。

引用:

ITransactionLocal インターフェイスは、Microsoft.Jet.OLEDB.4.0' プロバイダではサポートしていません。
ローカル トランザクションを現在のプロバイダで使用することはできません。



分散トランザクションは使えない気はしますが、
ローカルトランザクションなら使えてもいいかなと思ったのですが…

http://support.microsoft.com/kb/221071/en-us

ここを見ると、Jet 4.0 では ITransactionLocal がサポートされるとも
書いてありますけど、何故なんでしょう。
1

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