- PR -

【C#+ADO】登録したはずのデータが消える

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/04/18
投稿数: 3
投稿日時: 2006-04-18 11:56
はじめまして。
はじめて質問させて頂きます、BBDと申します。宜しくお願いいたします。

C#を習得する為に、C#.NET(2005)で簡単なサンプルプログラムを作成中
なのですが、データの登録処理でトランザクション管理がうまくいっていない
のかデータが登録されません。エラーは出ていません。

下記のExecDBUpdateを実行し、MDBにデータを登録完了後、すぐに登録した
データを検索した場合、そのデータが画面に表示されます。
※MDBのテーブルにも登録したレコードが存在しています。

ところが一度プログラムを終了し、再度そのデータを検索すると登録されていた
はずのデータが表示されません。
※プログラムを終了した時点でMDBのテーブルを確認すると登録したレコードは
 存在しています。再度そのデータを検索後、MDBのテーブルを確認すると
 そのデータの行は#Errorとなっており、データが消えてしまいます。

何かお気づきの点がありましたら、ご教授お願いいたします。


public class ClsDB
{
OleDbCommand cm = new OleDbCommand();

public bool ExecDBUpdate(String sql, OleDbConnection cn) {
//-----------------------------------------------------------------
//○関数名 :ExecDBUpdate
//○処理内容:SQLの実行
//○引数  :sql.....SQL文
//      Cn......コネクション
//○戻り値 :True...異常終了/False...正常終了
//-----------------------------------------------------------------

OleDbCommand cm = new OleDbCommand();
OleDbTransaction tr = null;

try
{
//トランザクションの実行
tr = cn.BeginTransaction();

//コネクションの設定
cm.Connection = cn;
cm.Transaction = tr;

//SQL文の設定
cm.CommandText = sql;

//SQL文の実行
cm.ExecuteNonQuery();

//コミット
tr.Commit();
}
catch (Exception ex)
{
myClsCommon.MsgBox("Error:" + ex, MessageBoxButtons.OK, MessageBoxIcon.Error);
//ロールバック
tr.Rollback();
return true;
}
finally
{
cn.Close();
}
return false;
}

}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-18 12:02
引用:

未記入さんの書き込み (2006-04-18 11:56) より:

※プログラムを終了した時点でMDBのテーブルを確認すると登録したレコードは
 存在しています。再度そのデータを検索後、MDBのテーブルを確認すると
 そのデータの行は#Errorとなっており、データが消えてしまいます。


トランザクション処理を全部外した場合はどうなりますか? (AutoCommit の場合)
まず、「原因の切り分け」から始めましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-04-18 12:46
http://www.ailight.jp/blog/unaap/archive/2005/12/07/10249.aspx

これじゃないのかなぁ。。。
未記入
会議室デビュー日: 2006/04/18
投稿数: 3
投稿日時: 2006-04-18 13:19
お世話になっております。
じゃんぬねっとさん、どっとねっとふぁんさん返信ありがとうございます。

AutoCommit の場合は投稿前に既に確認していましたが、駄目でした。

どっとねっとふぁんさんから教えていただいたMDBのプロパティで
出力ディレクトリにコピーを「常にコピーする」から「コピーしない」に
変更したところ、うまくいきました。

本当にありがとうございました(^^)
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-04-18 14:40
むかし同じことでやはりハマりました…_| ̄|○

引用:

未記入さんの書き込み (2006-04-18 13:19) より:
どっとねっとふぁんさんから教えていただいたMDBのプロパティで
出力ディレクトリにコピーを「常にコピーする」から「コピーしない」に
変更したところ、うまくいきました。


老婆心ながらですが、この場合は「コピーしない」よりは「新しい場合はコピーする」の方が良いような気がします。
元の(プロジェクトに入っている)MDBファイルに更新があった場合は、それが実行環境に反映されなくてまた悩んだりしてしまいそうですし。

余計なお世話でしたらすいません。
未記入
会議室デビュー日: 2006/04/18
投稿数: 3
投稿日時: 2006-04-18 15:00
ぽぴ王子さん、確かにそうですね。さっそく「新しい場合はコピーする」に
設定しなおします。
ありがとうございました!
1

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