- - PR -
列の追加がデータベースファイルに更新されない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2006-06-24 06:03
列の追加でエラーが発生していませんか? _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2006-06-24 10:43
特にエラーは発生していないようです
| ||||
|
投稿日時: 2006-06-24 10:54
ここかなー
http://www.ailight.jp/blog/unaap/archive/2005/12/07/10249.aspx | ||||
|
投稿日時: 2006-06-24 11:23
ソリューションエクスプローラにはDBファイルは表示されていないのですが・・・
ちなみに※1は私が更新のサンプルコードに勝手に追加したものです。 使い方が間違っているのでしょうか? --------------------------------------------------- resultDS.Tables("Products").Columns.Add("222") ※1 --------------------------------------------------- | ||||
|
投稿日時: 2006-06-24 11:46
DataTable.Columns.Addは あくまで、DataTableに列を追加するのであって、 DBに列を追加するわけではありません。 だから、DataAdapter.Updateを行ったところで、 DBに列は追加されません。 そもそも、Select文からCommandBuilderを利用して 生成したDataAdapterのUpdate()で発行されるコマンドは、 Insert Update Delete の3種であり、 テーブルのデザイン変更などは行われません。 もし、テーブルのデザイン変更をアプリケーションから行いたいのであれば、 IDbCommandを実装したクラスを利用して、 そのためのコマンドを発行しましょう。 | ||||
|
投稿日時: 2006-06-24 12:37
ご指摘ありがとうございます。
IDbCommandnクラスについて調べてみましたがいまいち・・・ お手数ですが、サンプルコードのようなものがありましたらお願いします。 | ||||
|
投稿日時: 2006-06-24 12:46
NAL-6295です。
IDbCommandはインタフェースで、それを実装したクラスがあるので、 (今回の場合はOleDBCommand) それを利用してください。 後は、MSDNを参照すれば、わかると思います。 |