- PR -

列の追加がデータベースファイルに更新されない

投稿者投稿内容
jornada690
常連さん
会議室デビュー日: 2006/06/13
投稿数: 25
投稿日時: 2006-06-24 03:51
vb.net2005で開発しています。
データベース関連は超初心者です。
MSAccessファイル(.mdb)に列を追加してもファイルには更新されずに困っています。
レコードは更新できました。
なにかアドバイスお願い致します。
下記のマイクロソフトのサンプルコードに列の追加(コードの※1)をしましたがだめでした。
何がいけないのでしょうか??

' 非接続データアクセスでの更新サンプル
Dim sqlDA As OleDbDataAdapter
Dim sqlCmdBldr As OleDbCommandBuilder
Dim resultDS As DataSet
Dim getConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=AAA.mdb"
Try
' DataAdapter オブジェクトの生成
sqlDA = New OleDbDataAdapter()
' DataSet オブジェクトの生成
resultDS = New DataSet()
With sqlDA
' SelectCommand オブジェクトの追加
.SelectCommand = New OleDbCommand()
' SelectCommand の各種プロパティの設定
With .SelectCommand
.CommandType = CommandType.Text
.CommandText = "SELECT * FROM xxx"
.Connection = New OleDbConnection(getConnectionString)
End With
' 検索結果をDataSet へ格納
.Fill(resultDS, "Products")
End With
' インメモリのDataSet に対する更新処理
resultDS.Tables("Products").Rows(3).Item("品種名") = "111"
resultDS.Tables("Products").Columns.Add("222") ※1

' Update 文の自動生成のためにCommandBuilder オブジェクトを生成
sqlCmdBldr = New OleDbCommandBuilder(sqlDA)
' DataSet に対する更新結果をDB へ反映
sqlDA.Update(resultDS, "Products")
Diagnostics.Debug.WriteLine("レコードが更新されました")
Catch E As Exception
Diagnostics.Debug.WriteLine(E.ToString)
Finally
End Try
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-06-24 06:03
引用:

' インメモリのDataSet に対する更新処理
resultDS.Tables("Products").Rows(3).Item("品種名") = "111"
resultDS.Tables("Products").Columns.Add("222") ※1


列の追加でエラーが発生していませんか?
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
jornada690
常連さん
会議室デビュー日: 2006/06/13
投稿数: 25
投稿日時: 2006-06-24 10:43
特にエラーは発生していないようです
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-06-24 10:54
ここかなー
http://www.ailight.jp/blog/unaap/archive/2005/12/07/10249.aspx
jornada690
常連さん
会議室デビュー日: 2006/06/13
投稿数: 25
投稿日時: 2006-06-24 11:23
ソリューションエクスプローラにはDBファイルは表示されていないのですが・・・
ちなみに※1は私が更新のサンプルコードに勝手に追加したものです。
使い方が間違っているのでしょうか?
---------------------------------------------------
resultDS.Tables("Products").Columns.Add("222") ※1
---------------------------------------------------
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-06-24 11:46
引用:

jornada690さんの書き込み (2006-06-24 11:23) より:
ソリューションエクスプローラにはDBファイルは表示されていないのですが・・・
ちなみに※1は私が更新のサンプルコードに勝手に追加したものです。
使い方が間違っているのでしょうか?
---------------------------------------------------
resultDS.Tables("Products").Columns.Add("222") ※1
---------------------------------------------------



DataTable.Columns.Addは
あくまで、DataTableに列を追加するのであって、
DBに列を追加するわけではありません。
だから、DataAdapter.Updateを行ったところで、
DBに列は追加されません。

そもそも、Select文からCommandBuilderを利用して
生成したDataAdapterのUpdate()で発行されるコマンドは、
Insert
Update
Delete
の3種であり、
テーブルのデザイン変更などは行われません。

もし、テーブルのデザイン変更をアプリケーションから行いたいのであれば、
IDbCommandを実装したクラスを利用して、
そのためのコマンドを発行しましょう。
jornada690
常連さん
会議室デビュー日: 2006/06/13
投稿数: 25
投稿日時: 2006-06-24 12:37
ご指摘ありがとうございます。
IDbCommandnクラスについて調べてみましたがいまいち・・・
お手数ですが、サンプルコードのようなものがありましたらお願いします。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-06-24 12:46
NAL-6295です。

IDbCommandはインタフェースで、それを実装したクラスがあるので、
(今回の場合はOleDBCommand)
それを利用してください。
後は、MSDNを参照すれば、わかると思います。

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