VB.NETでDB操作(追加と削除篇) [プログラミング]
前々々回、せっかくVisual Basic .NET を使って、Oracleのデータベースへアクセスする方法を調べたので、もう少しメモ。
データを更新
(略) da.SelectCommand.CommandText = "select * from TABLE1 where ID='2000'" Dim cb As New System.Data.OleDb.OleDbCommandBuilder(da) da.Fill(ds, "XXX") ' まず更新元になるデータを取得 ' ココに、ちゃんとレコードを取得できたかどうかの判定が必要。 ds.Tables("XXX").Rows(0)("NAME") = "新しい名前" da.Update(ds, "XXX")
どこにも使っていないのに、OleDbCommandBuilder
のオブジェクトを作る必要があるのがミソ(見えないところでこっそりと働いていて、更新や追加用のSQLを作ってくれるらしい)。
後は、適当にデータを設定して、最後に OleDbDataAdapter
オブジェクトの Update
メソッドを呼ぶだけ。
値に NULL
を指定したいなら、DBNull.Value
を使います。
ds.Tables("XXX").Rows(0).Item("NAME") = DBNull.Value
SQLのUPDATE文を使う場合は、こんな感じ。
Dim sql As String = "update TABLE1 set NAME='新しい名前' where ID='2000'" Dim cmd As New System.Data.OleDb.OleDbCommand(sql, conn) conn.Open() cmd.ExecuteNonQuery() conn.Close()
追加(INSERT)や削除(DELETE)も、この方法でOKです。
トランザクション処理
conn.Open() Dim tran As System.Data.OleDb.OleDbTransaction = conn.BeginTransaction() da.SelectCommand.Transaction = tran Dim cb As New System.Data.OleDb.OleDbCommandBuilder(da) ' 更新処理なので必要 da.Fill(ds, "XXX") ds.Tables("XXX").Rows(0)("NAME") = DBNull.Value da.Update(ds, "XXX") tran.Commit() ' tran.Rollback() conn.Close()
OleDbConnection
の BeginTransaction
メソッドで、トランザクションを管理するオブジェクトを取得し、OleDbCommand
オブジェクトの Transaction
プロパティに設定します。
この時点でトランザクションは開始しているので、後は好きなように更新して、最後に Commit
または、Rollback
でお終い。
トランザクションを開始する前に、OleDbConnection
の Open
を実行しておかないといけません。
データの追加
da.SelectCommand.CommandText = "select * from TABLE1" Dim cb As New System.Data.OleDb.OleDbCommandBuilder(da) ' 追加処理でも必要 da.Fill(ds, "XXX") Dim row As System.Data.DataRow = ds.Tables("XXX").NewRow() row("ID") = "3000" row("NAME") = "真・名前" ds.Tables("XXX").Rows.Add(row) da.Update(ds, "XXX")
DataTable
オブジェクトの NewRow
メソッドで追加するレコードの雛形(DataRow
オブジェクト)を取得して、そこに適当に値を設定した後、DataTable
オブジェクトに追加(Add
メソッド)して、DBを更新(Update
メソッド)します。
2つ以上のレコードを作って、まとめて追加することもできます。
OleDbDataAdapter
の Update
は最後の1回でOK。
テーブルの構造を取得しなければならないので、たとえ不要でもSELECT文(Fill
メソッド)でデータを取得しないとダメなんだろうか?
その時は、「select * from TABLE1 where FALSE
」とかしたら、処理が軽くなりそう……。
データの削除
Dim cb As New System.Data.OleDb.OleDbCommandBuilder(da) ' 削除処理でも必要 da.Fill(ds, "XXX") ' まず削除したいデータを取得 ' ココに、ちゃんとレコードを取得できたかどうかの判定が必要。 ds.Tables("XXX").Rows(0).Delete() da.Update(ds, "XXX")
ds.Tables("XXX").Rows.RemoveAt(0)
で消してしまうわけじゃない。
今日の一冊 | |
|
コメント 0