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