- ベストアンサー
データセットのレコード更新がしたい
VB .Netでデータベースの追加・変更をしています。 データセットのレコードを追加できたのですが、変更がわかりません。 追加は・・・dtrow = dttable.NewRowで始まり、追加したい項目を書いています。 そして終わりは・・・ ''行を追加 dttable.Rows.Add(dtrow) ''データソースを更新 oleDa.Update(dttable) 変更はどうしたらよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>データセットのレコード更新がしたい データセット?データセットにはレコードはありません データテーブルにレコードがあります こんな感じ Dataset └─DataTable └─DataRowCollection 新規追加ができているなら更新は簡単です まず更新したいレコードを検索する 検索できたら、そのレコードをDataRowにて取得する その後、対象フィールドを上書きしてからDataTableのUpdateメソッドにて更新する [例] Dim dRow As DataRow '主キーにて検索(※123は検索項目値) dRow = dTbl.Rows.Find(New Object() {123}) If Not dRow Is Nothing Then 'フィールド更新 dRow.Item("hogehoge") = "ほげほげ" dTbl.Update() End If
その他の回答 (2)
- how-do-you-do
- ベストアンサー率56% (59/104)
こんな感じですかね Dim strConn As String '接続文字列 Dim oleConn As OleDbConnection 'コネクション Dim oleDa As OleDbDataAdapter 'データアダプタ Dim oleCb As OleDbCommandBuilder 'コマンドビルダ Dim strSQL As String 'SQL Dim dttable As DataTable Dim dtrow As DataRow strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\test.mdb" oleConn = New OleDbConnection(strConn) strSQL = "SELECT * FROM " & TableName oleDa = New OleDbDataAdapter(strSQL, oleConn) oleCb = New OleDbCommandBuilder(oleDa) dttable = New dttable oleDa.Fill(dttable) oleDa.FillSchema(dttable) dtrow = dttable.NewRow dtrow("日付") = "20050401" ''行を追加 dttable.Rows.Add(dtrow) ''データソースを更新 oleDa.Update(dttable) コマンドビルダは、データアダプタの「SelectCommand」を基にして 「InsertCommand」「UpdateCommand」「DeleteCommand」に自動でSQLを設定してくれます まだ慣れないうちは、このコマンドビルダを使用してもよいでしょうが、 慣れてきたら個別に記述するのがよろしいでしょう HOME > VB.NET Tips HOME > コントロール > DataSet http://vbdotnet.fc2web.com/vbnet/control/DataSetMenu.htm
- how-do-you-do
- ベストアンサー率56% (59/104)
>Dataset >└─DataTable > └─DataRowCollection Dataset └─DataTableCollection └─DataRowCollection 間違えました orz
補足
新規追加できてると思ったらできていなかったです・・・。データソースを更新する時に、 更新には、新しい行を含む DataRow コレクションが渡されたとき、有効な InsertCommand が必要です。 のエラーが出ます。 追加したい項目の書き方は・・・ dtrow = dttable.NewRow dtrow("日付") = "20050401" ''行を追加 dttable.Rows.Add(dtrow) ''データソースを更新 oleDa.Update(dttable) ではダメですか? INSERT文でするのでしょうか?
補足
新規作成はできました。 更新は・・・ oleCmd.CommandText = "SELECT * FROM ファイル WHERE 日付 = '20050320';" oleDa.SelectCommand = oleCmd oleDa.Fill(dttable) If dttable.Rows.Count > 0 Then dtrow.BeginEdit() End if dtrow.BeginEdit()でエラーがでます。 オブジェクト参照がオブジェクト インスタンスに設定されていません。 新規作成ではdtrow = dttable.NewRowとしているので更新の場合もdtrow = ??としなければならないと思いますが・・・何をしたら良いかわかりません。