[VB.NET][Oracle] Dapper を使用して Oracle にアクセスしてみた

2014年8月24日

 VB.NET で Dapper を使って Oracle に接続してみました。
 Dapper というのは .net 用の MicroORM のことです。概要はこちらを。

  1. SELECT の場合(動的オブジェクトで戻してもらう場合)
    Dim connstr = "User Id=scott; Password=*****; Data Source=*****"
    
    Using cn As System.Data.IDbConnection = New Oracle.DataAccess.Client.OracleConnection(connstr)
        cn.Open()
    
        Dim result = cn.Query( _
                             "select * from EMP where EMPNO <= :empno", _
                             New With {.empno = "7800"})
    
        ' 一つずつ拾う
        For Each x In result
            Debug.Print(x.ENAME)
        Next
    
        cn.Close()
    End Using
    

     特筆すべきは、バインド変数の値を動的オブジェクトを使って与えられるところでしょうか。Parameter.Add が必要がありません。
     ただ、この場合は動的オブジェクトで戻るのでインテリセンスは効きません(汗

  2. SELECT の場合(事前にクラスを用意し、それに MAP したい場合)
    Dim connstr = "User Id=scott; Password=*****; Data Source=*****"
    
    Using cn As System.Data.IDbConnection = New Oracle.DataAccess.Client.OracleConnection(connstr)
        cn.Open()
    
        Dim result = cn.Query(Of EMP)( _
                             "select * from EMP where EMPNO <= :empno", _
                             New With {.empno = "7800"})
    
        ' 一つずつ拾う
        For Each x In result
            Debug.Print(x.ENAME)
        Next
    
        cn.Close()
    End Using
    

     Query メソッドに MAP したいクラスの型名を与えてやるだけです。
     クラスの定義はごく普通に。クラス内にある Private クラスでよいし、メンバーも Property ではなく Field で OK のようです。
     ポイントは、SELECT 側の列型名とクラス側のメンバー変数名を同じにしておくこと。

    Private Class EMP
        Public EMPNO As Integer
        Public ENAME As String
        Public JOB As String
        Public MGR As Integer
        Public HIREDATE As Date
        Public SAL As Decimal
        Public COMM As Decimal
        Public DEPTNO As Integer
    End Class
    
  3. Insert の場合
    Dim connstr = "User Id=scott;Password=*****;Data Source=*****"
    
    Using cn As System.Data.IDbConnection = New Oracle.DataAccess.Client.OracleConnection(connstr)
        cn.Open()
    
        Using tr = cn.BeginTransaction
            cn.Execute("insert into EMP (EMPNO) values (:EMPNO)", {New With {.EMPNO = 30},
                                                                   New With {.EMPNO = 40}})
    
            tr.Commit()
        End Using
    
    
        cn.Close()
    End Using
    

     なんと 単純変数だけでなく Collection も渡すことができます。上記は直接配列を作成していますが、ここに List(Of Object) な変数を充てても動作します。






カテゴリー: Oracle, Program, VB.NET, データベース

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org