SSブログ

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
  • メディア: 単行本

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

nice! 1

コメント 0

コメントを書く

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

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。