SSブログ

VB.NETでOracleのDBを操作します [日記]

Visual Basic .NET を使って、Oracleのデータベースへアクセスするプログラムを作ることになりました。

VBを使うこと自体久しぶりで、VB.NETは初めてだったりするのですが(.NET Framework は以前C#でちょっと使ったことがある)
「既に作ったプログラムがいくつかあるから、それを参考にすれば簡単」
と言われ、引き受けることになりました。

ソースコードを眺めていると、一番肝になるVB.NETでOracleのDBにアクセスする方法が、2種類見つかりました。

' -- 1つ目 --
Imports System.Data.OleDb

Dim sql as String
Dim conn As OleDbConnection

Dim da As OleDbDataAdapter
Dim ds As New DataSet

conn = New OleDbConnection("Provider=MSDAORA;Data Source=" & サーバ & _
                           ";User ID=" & ユーザ & ";Password=" & パスワード & ";")

sql = "select * from TABLE1"

da = New OleDbDataAdapter(sql, conn)
da.Fill(ds, "TABLE1")

Dim i As Integer
Dim size As Integer = ds.Tables("TABLE1").Rows.Count

For i = 0 To size - 1
    Console.WriteLine("" & ds.Tables("TABLE1").Rows.Item(i).Item("NAME"))
Next
' -- 2つ目 --
Dim sql as String

Dim session As OraSession
Dim db As OraDatabase
Dim ds As OraDynaset

session = CreateObject("OracleInProcServer.XOraSession")
session.CreateDatabasePool(1, 2, 200, サーバ, ユーザ & "/" & パスワード, & _
                           dbOption.ORADB_DEFAULT)
db = session.GetDatabaseFromPool(100)

sql = "select * from TABLE1"

ds = db.CreateDynaset(sql, dynOption.ORADYN_DEFAULT)

Do Until ds.EOF
    Console.WriteLine(ds.Fields("NAME").Value)

    ds.MoveNext()
Loop

どっちも同じ人が作ったプログラム(の一部)なので、
「何故2種類もあるのか?」
「どう違っていて、どう使い分けているのか?」
と尋ねたところ、
(某アニメのBlu-ray ディスクのCMの様に)
「さぁ」
と答えられました。

クビ絞めて良いかな?

「インターネットで見つけたサンプルコードを適当に繋げただけだから」

ネットで拾った良く分からない物を良く分からないまま業務に使わないで下さいー

「良く分からんけど、2つ目の方法だと、終了してもDBとのセッションが切れないから要注意ということで」

いや、だから、そういうものを業務に……。

そこでちょっと調べて見ました。

1つ目の方法は、.NET Framework が提供しているクラスを使う方法。

2つ目は、COMテクノロジを使ってOracleが提供しているライブラリ(Oracle Objects for OLE、略して oo4o))を使う方法。

どちらを使うのは良いのかは人それぞれだと思うけど、先のことを考えたら(1つ目の).NET Frameworkのクラスを使う方法が良いのだろうな……。


で、もう1つの謎の挙動「DBとのセッションが切れない」は、まぁ、これですよね、原因。

session.CreateDatabasePool(1, 2, 200, サーバ, ユーザ & "/" & パスワード, & _
                           dbOption.ORADB_DEFAULT)
db = session.GetDatabaseFromPool(100)

タイムアウトが200秒なので、3分とちょっとは接続されたままじゃないかな。
session.DestroyDatabasePool() で、コネクションプールを破棄してなかったし。

繋いだり切ったりを繰り返さないならプールは不要で、上の2行の代わりに、↓で十分。

db = session.OpenDatabase(サーバ, ユーザ & "/" & パスワード, & _
                          dbOption.ORADB_DEFAULT)

[船] 今日の一冊
オバマ暗殺

オバマ暗殺

  • 作者: 柘植 久慶
  • 出版社/メーカー: 角川春樹事務所
  • 発売日: 2009/03
  • メディア: 単行本


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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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