- - PR -
【C#+ADO】登録したはずのデータが消える
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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; } } | ||||
|
投稿日時: 2006-04-18 12:02
トランザクション処理を全部外した場合はどうなりますか? (AutoCommit の場合) まず、「原因の切り分け」から始めましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-04-18 12:46
http://www.ailight.jp/blog/unaap/archive/2005/12/07/10249.aspx
これじゃないのかなぁ。。。 | ||||
|
投稿日時: 2006-04-18 13:19
お世話になっております。
じゃんぬねっとさん、どっとねっとふぁんさん返信ありがとうございます。 AutoCommit の場合は投稿前に既に確認していましたが、駄目でした。 どっとねっとふぁんさんから教えていただいたMDBのプロパティで 出力ディレクトリにコピーを「常にコピーする」から「コピーしない」に 変更したところ、うまくいきました。 本当にありがとうございました(^^) | ||||
|
投稿日時: 2006-04-18 14:40
むかし同じことでやはりハマりました…_| ̄|○
老婆心ながらですが、この場合は「コピーしない」よりは「新しい場合はコピーする」の方が良いような気がします。 元の(プロジェクトに入っている)MDBファイルに更新があった場合は、それが実行環境に反映されなくてまた悩んだりしてしまいそうですし。 余計なお世話でしたらすいません。 | ||||
|
投稿日時: 2006-04-18 15:00
ぽぴ王子さん、確かにそうですね。さっそく「新しい場合はコピーする」に
設定しなおします。 ありがとうございました! |
1