So-net無料ブログ作成

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()

OleDbConnectionBeginTransaction メソッドで、トランザクションを管理するオブジェクトを取得し、OleDbCommand オブジェクトの Transaction プロパティに設定します。

この時点でトランザクションは開始しているので、後は好きなように更新して、最後に Commit または、Rollback でお終い。

トランザクションを開始する前に、OleDbConnectionOpen を実行しておかないといけません。


データの追加

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つ以上のレコードを作って、まとめて追加することもできます。
OleDbDataAdapterUpdate は最後の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) で消してしまうわけじゃない。

[飛行機] 今日の一冊
名探偵の掟

名探偵の掟

  • 作者: 東野 圭吾
  • 出版社/メーカー: 講談社
  • 発売日: 1996/02
  • メディア: 単行本

タグ:.net DB VB.NET
nice!(1)  コメント(0)  トラックバック(0) 

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0