C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 30 を表示中)
■14215 / )  DataGridViewの変更をアクセスデータベースに反映
□投稿者/ いの (1回)-(2008/02/13(Wed) 14:10:44)

分類:[VB.NET/VB2005] 

環境:VS2005
OS:Windows XP
言語:VB

初めまして。こちらも含めてVBの質問は初めてになりますが、よろしくお願いします。
至らないところがあればすみません。

今、Accessデータベースのテーブルを取得して、DataGridViewに表示させています。
そこから、任意にDataGridViewの内容を変更(変更させる列は決まっています)し、まずDataGridViewに反映させます。
次にAccessデータベースのテーブルに変更した内容を反映させる予定です。
本やインターネットで色々調べたのですがどうしてもうまくいかず、こちらで質問させていただきます。
プログラムは以下の通りです。ある程度簡略化して書きます。

Dim A As New DataTable
Dim E As OleDb.OleDbCommand
Dim F As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim G As OleDb.OleDbTransaction

F.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=Access.mdb;Persist Security Info=False"

F.Open()
E = F.CreateCommand
G = F.BeginTransaction()
E.Connection = F
E.Transaction = G
E.CommandText = "UPDATE Accessテーブル SET 〜〜〜 WHERE 〜〜〜"
E.ExecuteNonQuery()
G.Commit()
F.Close()

For Each Row As DataRow In A.Rows
Dim SQL As String = ""

Select Case Row.RowState
Case DataRowState.Modified

SQL = "UPDATE Accessテーブル SET 〜〜〜 WHERE 〜〜〜"

Case Else
Continue For

End Select

E.CommandText = SQL
F.Open()
E.ExecuteNonQuery()
F.Close()

Next

Row.AcceptChanges()

A.Dispose()
F.Dispose()

本では、OleDB.OleDBDataAdapterやDataSetを使い、データセットにコマンドビルダを作成、
DataAdapterをUPDATEしてデータベースに反映させていますが、うまくいきませんでした。
上のプログラムはインターネット上でのやり方(アレンジはしています)で書いていますが、これもうまくいっていません。
トランザクション処理も混ぜています。2回ExecuteNonQueryしていますが1回でも十分なことは確認済みなんですが、
こういうやり方もしていますってことで書いてみました。
SQL文は、DataGridViewの内容にCheck Boxや数値、文字が混じっていますので、DataBindingでLabelと関連付けて書いています。

上のプログラムの内容ですと、DataGridViewの内容は変更されています。イミディエイトウインドウでもModifiedになっています。
しかし、Accessデータベースのテーブルの内容までは変更されていません。

色々ごちゃ混ぜになっていてややこしくなっていますが、ご教授いただければ幸いです。

返信 編集キー/


管理者用

- Child Tree -