DB関連共通関数

Oracle数据库操作实用指南
本文介绍了一个用于操作Oracle数据库的实用工具类,包括连接数据库、执行SQL查询、处理事务等功能,并提供了具体的实现方法。

 Option Strict On
Option Explicit On

Imports Microsoft.VisualBasic
Imports Oracle.DataAccess.Client

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'  <DbUtil>
' 概要:<DB関連共通関数>
' 改版履歴:
' <20080716> <Nakamura> 初版
' <YYYYMMDD> <姓(ローマ字)> <修正箇所(クラス・メソッド名など)> <修正内容>
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Class DbUtil

    'Oracleのデータベースの接続
    Private Shared oraConn As OracleConnection = New OracleConnection()
    'Oracleのデータリーダ
    Private oraDr As OracleDataReader
    'Oracleのトランザクション
    Private oraTrans As OracleTransaction

    '共通関数クラス
    Private clsUtil As New Util

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <DbOpen>DBに接続する
    ' @author <20080717>
    ' @param <> <>
    ' @return <>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub DbOpen()
        Dim connectionString As String = Nothing          '接続文字列

        Try
            '接続文字列を設定する
            connectionString = "Data Source= " + clsUtil.GetIniSectionData(StrConst.IniDb, StrConst.IniDns)
            connectionString += ";User ID=" + clsUtil.GetIniSectionData(StrConst.IniDb, StrConst.IniUsr)
            connectionString += ";Password=" + clsUtil.GetIniSectionData(StrConst.IniDb, StrConst.IniPWD) + ";"

            'コネクションを取得する
            oraConn = New OracleConnection(connectionString)

            '取得できなかった場合
            If oraConn Is Nothing Then
                'エラー処理
                Throw New Exception
            End If

            'DBに接続する
            oraConn.Open()

        Catch ex As Exception
            'エラー処理
            Throw ex
        End Try
    End Sub


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <ExecuteReader>SELECT文を実行してデータリーダーを返す
    ' @author <20080716>
    ' @param <commandText> <SQL文>
    ' @param <commandParameters> <SQL文設定用パラメータ>
    ' @return <検索結果であるデータリーダー>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function ExecuteReader(ByVal commandText As String, _
                                                    ByVal commandParameters As OracleCommand) As OracleDataReader
        Dim OraCommand As OracleCommand = New OracleCommand         'SQL実行の為の設定用

        Try
            'パラメータを設定
            OraCommand = commandParameters
            'DB接続オブジェクトを設定
            OraCommand.Connection = oraConn
            'SQL文を設定
            OraCommand.CommandText = commandText
            '名前によるパラメータ識別をON
            OraCommand.BindByName = True

            'クエリを実行
            oraDr = OraCommand.ExecuteReader()

            Return oraDr

        Catch ex As Exception
            Throw ex
        End Try
    End Function


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <ExecuteReaderTable>SELECT文を実行してデータテーブルを返す
    ' @author <20080716>
    ' @param <commandText> <SQL文>
    ' @param <commandParameters> <SQL文設定用パラメータ>
    ' @return <検索結果であるデータテーブル>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function ExecuteReaderTable(ByVal commandText As String, _
                                                    ByVal commandParameters As OracleCommand) As Data.DataTable
        Dim SearchTbl As New Data.DataTable                     '検索結果格納テーブル
        Dim row As Data.DataRow = Nothing                       '検索結果格納用行

        Try
            'SQLを実行する
            oraDr = ExecuteReader(commandText, commandParameters)

            'DataTableにカラムを追加
            For i As Integer = 0 To oraDr.GetSchemaTable.Rows.Count - 1
                SearchTbl.Columns.Add(DirectCast(oraDr.GetSchemaTable.Rows(i).Item("ColumnName"), String), GetType(String))
            Next

            'DataTableに詳細を追加
            Do While oraDr.Read
                row = SearchTbl.NewRow()
                For i As Integer = 0 To oraDr.FieldCount - 1
                    row(i) = CheckValue(oraDr.GetValue(i))
                Next
                SearchTbl.Rows.Add(row)
   Loop

   ''データリーダを閉じる
   'oraDr.Close()

            Return SearchTbl

        Catch ex As Exception
   Throw ex
  Finally

   'データリーダを閉じる
   DrClose()
  End Try
    End Function


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <DoExecute>DML SQL文を実行する
    ' @author <20080717>
    ' @param <commandText> <SQL文>
    ' @param <commandParameters> <SQL文設定用パラメータ>
    ' @return <更新件数>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function DoExecute(ByVal commandText As String, _
                                                    ByVal commandParameters As OracleCommand) As Integer
        Dim OraCommand As OracleCommand = New OracleCommand         'SQL実行の為の設定用
        Dim intUpCou As Integer = 0                                 '更新件数

        Try
            'パラメータを設定
            OraCommand = commandParameters
            'DB接続オブジェクトを設定
            OraCommand.Connection = oraConn
            'SQL文を設定
            OraCommand.CommandText = commandText
            '名前によるパラメータ識別をON
            OraCommand.BindByName = True

            'クエリを実行
            intUpCou = OraCommand.ExecuteNonQuery()

            Return intUpCou

        Catch ex As Exception
            Throw ex
        End Try
    End Function


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <BeginTransaction>トランザクションを開始する
    ' @author <20080717>
    ' @param <> <>
    ' @return <>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub BeginTransaction()
        Try
            'データベースでトランザクションを開始する
            oraTrans = oraConn.BeginTransaction()

        Catch ex As Exception
            'エラー処理
            Throw ex
        End Try
    End Sub


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <Commit>トランザクションをコミットする
    ' @author <20080717>
    ' @param <> <>
    ' @return <>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub Commit()
        Try
            'トランザクションがない場合
            If oraTrans Is Nothing Then
                Return
            End If

            'コミットを実行する
            oraTrans.Commit()

        Catch ex As Exception
            'エラー処理
            Throw ex
        End Try
    End Sub


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <RollBack>トランザクションをロールバックする
    ' @author <20080717>
    ' @param <> <>
    ' @return <>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub RollBack()
        Try
            'トランザクションがない場合
            If oraTrans Is Nothing Then
                Return
            End If

            'ロールバックを実行する
            oraTrans.Rollback()

        Catch ex As Exception
            'エラー処理
            Throw ex
        End Try
    End Sub


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <DrClose>DataReaderへの接続を閉じる
    ' @author <20080717>
    ' @param <> <>
    ' @return <>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub DrClose()
        Try
            oraDr.Close()
        Catch ex As Exception
            'エラー処理
            Throw ex
        End Try
    End Sub


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <DbClose>データベースへの接続を閉じる
    ' @author <20080717>
    ' @param <> <>
    ' @return <>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub DbClose()
        Try
            '接続が既に閉じている場合
            If oraConn Is Nothing Or oraConn.State = System.Data.ConnectionState.Closed Then
                Return
            End If

            '接続を閉じる
            oraConn.Close()

        Catch ex As Exception
            'エラー処理
            Throw ex
        End Try
    End Sub


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <CreateSelect>登録(日・ユーザID・プログラム名)・更新(日・ユーザID・プログラム名)の項目をパラメータに設定する
    ' @author <20080716>
    ' @param <commandParameters> <SQL文設定用パラメータ>
    ' @param <userId> <ユーザID>
    ' @param <prgName> <プログラム名>
    ' @return <>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub InsertParameterSet(ByRef commandParameters As OracleCommand, ByVal userId As String, ByVal prgName As String)
        '登録日時
        commandParameters.Parameters.Add("CRT_DATE", OracleDbType.Date, Now(), Data.ParameterDirection.Input)
        '登録者
        commandParameters.Parameters.Add("CRT_USER", OracleDbType.Varchar2, userId, Data.ParameterDirection.Input)
        '登録プログラム
        commandParameters.Parameters.Add("CRT_PRG", OracleDbType.Varchar2, prgName, Data.ParameterDirection.Input)
        '更新日時
        commandParameters.Parameters.Add("UPD_DATE", OracleDbType.Date, Now(), Data.ParameterDirection.Input)
        '更新者
        commandParameters.Parameters.Add("UPD_USER", OracleDbType.Varchar2, userId, Data.ParameterDirection.Input)
        '更新プログラム
        commandParameters.Parameters.Add("UPD_PRG", OracleDbType.Varchar2, prgName, Data.ParameterDirection.Input)
    End Sub


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <UpdateSelect>更新(日・ユーザID・プログラム名)の項目をパラメータに設定する
    ' @author <20080716>
    ' @param <commandParameters> <SQL文設定用パラメータ>
    ' @param <userId> <ユーザID>
    ' @param <prgName> <プログラム名>
    ' @return <>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub UpdateParameterSet(ByRef commandParameters As OracleCommand, ByVal userId As String, ByVal prgName As String)
        '更新日時
        commandParameters.Parameters.Add("UPD_DATE", OracleDbType.Date, Now(), Data.ParameterDirection.Input)
        '更新者
        commandParameters.Parameters.Add("UPD_USER", OracleDbType.Varchar2, userId, Data.ParameterDirection.Input)
        '更新プログラム
        commandParameters.Parameters.Add("UPD_PRG", OracleDbType.Varchar2, prgName, Data.ParameterDirection.Input)
    End Sub


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' <CheckValue>DBから抽出したカラムがNULの場合、空文字を返す
    ' @author <20080717>
    ' @param <strBuff> <対象カラム>
    ' @return <対象文字列または空文字>
    ' @see <関連項目の説明>
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function CheckValue(ByVal strBuff As Object) As String
        If TypeOf strBuff Is System.DBNull Then
            Return ""
        Else
            Return CStr(strBuff)
        End If
    End Function

End Class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值