2011-03-06 14 views
1

私はこの点列の値にアクセスデータベースMSアクセスDB実行後(C#)を、変更を保存doesntの

OleDbConnection con = new OleDbConnection(myproject.Properties.Settings.Default.myDBConnectionString); 
con.Open(); 
OleDbCommand command = new OleDbCommand("INSERT INTO components (name) VALUES (@p_col1)", con); 
command.Parameters.Add("@p_col1", OleDbType.VarChar).Value = "test row"; 
int rows = command.ExecuteNonQuery(); 

を使用するため、次のコードを有する1であり、行が挿入された後、私は、選択クエリを行うときであります利用可能です。この問題は、プログラムが終了すると発生します。それ以降の実行では、行はもう存在しません。

I'veは取引

OleDbTransaction transaction = con.BeginTransaction(); 
command.Transaction = transaction; 
transaction.Commit(); 

とデータセットを使用してADOこの方法で試してみました

//... add row to dataset ... 
OleDbDataAdapter sda = new OleDbDataAdapter("select * from components", con); 
OleDbCommandBuilder cb = new OleDbCommandBuilder(sda); 

sda.Update(ds.Components); //tried with ds.Components.AcceptChanges(); before and after this line 

が、私は同じ問題を抱えているすべてのケースで、で行われていないINSERTクエリのように思える

実際のデータベースあなたはなぜこれが起こっているのか知っていますか?

ありがとうございます。

+0

正しいデータベースを確認していますか? –

+0

パラメータを指定してINSERT文を実行した後、データはテーブルに表示されますか? –

答えて

4

データベースはbinディレクトリにありますか?それはあなたのプロジェクトの一部ですか?これは、ビルドするたびにbinディレクトリのデータベースをプロジェクトディレクトリから上書きして、保存されていないように見える場合に発生します。

+0

ビルドするたびに、プロジェクトのbinディレクトリのデータベースを上書きしていました。それはスタイリッシュな解決策ではありませんが、connectionStringのDataSourceプロパティを変更すると、プロジェクトディレクトリ内のデータベースを指すようになります。 – blitz32

0

複数のデータベースがあり、挿入しようとしているデータベースに挿入していない可能性があります。

0

MS Visual Studioは、Access DBを製品に組み込みます。 ---製品は、binディレクトリにあります。 ---アプリケーションによるDBの変更をすべて表示するには、このファイルを使用してください DBをプロジェクトに最初に追加すると、ビルド時に常にその製品が更新されるように設定されます。 これは良いことですが、私はそれがむしろ迷惑であると感じます。 解決方法: ソリューションエクスプローラからMS Accessデータベースを選択します。 F4キーを押してプロパティに移動します。 「常に出力」の代わりに「出力ディレクトリにコピー」フィールドを「コピーする」に変更します。

関連する問題