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)
今日の一冊 | |
|
コメント 0