Oracle 读INI文件连接数据库

Option Strict Off
Option Explicit On
Imports System.ComponentModel
Imports System.Web
Imports System.Configuration
Imports System.Net
Imports System.Xml
Imports System.Data
Imports System.IO.File
Imports System.Text
Imports System.Runtime.InteropServices
Imports System
Imports Oracle.DataAccess.Client
Imports Oracle.DataAccess.Types

Module Access

    Public Declare Function GetPrivateProfileString Lib "kernel32" _
      Alias "GetPrivateProfileStringA" ( _
      <MarshalAs(UnmanagedType.LPStr)> ByVal lpApplicationName As String, _
      <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _
      <MarshalAs(UnmanagedType.LPStr)> ByVal lpDefault As String, _
      <MarshalAs(UnmanagedType.LPStr)> ByVal lpReturnedString As StringBuilder, _
      ByVal nSize As UInt32, _
      <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String) As UInt32
    Public DbConn As New OracleConnection
    Public DbTxn As OracleTransaction
    Public Const INI_SRC As String = "HOSTNAME"
    Public Const INI_USPSR As String = "USERNAME"
    Public TransactionFlg As Boolean
    Public OraCmd As New OracleCommand
    Public Const STR_MAX_SIZE As Integer = 128   'DLL戻り値のサイズの定数
    Public Declare Function ShowWindow Lib "USER32.DLL" (ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Integer
    Public Declare Function SetForegroundWindow Lib "USER32.DLL" (ByVal hWnd As IntPtr) As Boolean

    Public Const INI_FILENM As String = "STDPRG.INI" 'INIファイル名
    Public Const SW_NORMAL As Integer = 1

    Private Function ConnectOraDatabase() As Boolean
        Dim APP_INI As String
        APP_INI = System.Reflection.Assembly.GetExecutingAssembly.Location()
        APP_INI = Mid(APP_INI, 1, InStrRev(APP_INI, "\")) & INI_FILENM
        'APP_INI = My.Computer.FileSystem.CurrentDirectory & "\" & INI_FILENM

        Dim dsrc As String = GetIniData(APP_INI, "ORACLE", INI_SRC)
        Dim uspsid As String = GetIniData(APP_INI, "ORACLE", INI_USPSR)
        Dim usid As String
        Dim pswd As String

        usid = Mid(uspsid, 1, InStrRev(uspsid, "/") - 1)
        pswd = Mid(uspsid, InStrRev(uspsid, "/") + 1, Len(uspsid))

        If pswd = "*" Then pswd = usid
        If pswd = "#" Then pswd = usid & "user"
        DbConn.ConnectionString = "user id=" & usid & ";password=" & pswd & ";data source=" & dsrc
        OraCmd.Connection = DbConn

    End Function

    '指定のiniファイル情報からDBをOPENする
    Public Sub InitDb()
        Dim APP_INI As String
        APP_INI = System.Reflection.Assembly.GetExecutingAssembly.Location()
        APP_INI = Mid(APP_INI, 1, InStrRev(APP_INI, "\")) & INI_FILENM

        Dim dsrc As String = GetIniData(APP_INI, "ORACLE", INI_SRC)
        Dim uspsid As String = GetIniData(APP_INI, "ORACLE", INI_USPSR)
        Dim usid As String
        Dim pswd As String

        usid = Mid(uspsid, 1, InStrRev(uspsid, "/") - 1)
        pswd = Mid(uspsid, InStrRev(uspsid, "/") + 1, Len(uspsid))

        If pswd = "*" Then pswd = usid
        If pswd = "#" Then pswd = usid & "user"
        DbConn.ConnectionString = "user id=" & usid & ";password=" & pswd & ";data source=" & dsrc
        DbConn.Open()
        OraCmd.Connection = DbConn

    End Sub

    'DBをCLOSEする。
    Public Sub CloseDb()
        DbConn.Close()
    End Sub

    Public Function GetData(ByVal aSql As String, ByVal aTab As String, ByRef aDs As DataSet) As Boolean

        Dim aRet As Boolean

        If DbConn.State = ConnectionState.Closed Then
            ConnectOraDatabase()
        End If

        OraCmd.CommandText = aSql

        Dim OraDa As New OracleDataAdapter(OraCmd)
        If aDs.Tables.Contains(aTab) Then aDs.Tables(aTab).Clear()
        OraDa.Fill(aDs, aTab)

        'データ存在チェック
        If aDs.Tables(aTab).Rows.Count = 0 Then
            aRet = False
        Else
            aRet = True
        End If

        If TransactionFlg = False Then
            CloseDb()
        End If

        Return aRet

    End Function

    Public Function ExecuteSql(ByVal aSql As String) As Boolean

        If DbConn.State = ConnectionState.Closed Then
            InitDb()
        End If

        OraCmd.CommandText = aSql
        OraCmd.ExecuteNonQuery()

        If TransactionFlg = False Then
            CloseDb()
        End If

    End Function

    'INIファイルに登録されているデータを取得する
    Public Function GetIniData(ByVal AppIniFile As String, ByVal IpApplicationName As String, ByVal IpKeyName As String) As String
        Dim DLL_MAX_SIZE As Integer = 128   'DLL戻り値のサイズの定数
        Dim X As UInt32
        Dim szBuf As System.Text.StringBuilder

        szBuf = New System.Text.StringBuilder(DLL_MAX_SIZE)      '128バイトの領域を確保する
        X = GetPrivateProfileString(IpApplicationName, IpKeyName, "", szBuf, Convert.ToUInt32(DLL_MAX_SIZE), AppIniFile)

        GetIniData = Left$(szBuf.ToString, X.ToString)

    End Function

    '2重起動のチェック
    Public Function CheckExistProcess(ByVal processName As String) As Boolean
        Dim aRet As Boolean = False

        Dim arrProcess As System.Diagnostics.Process()
        arrProcess = System.Diagnostics.Process.GetProcessesByName(processName)
        If (arrProcess.Length > 1) Then
            aRet = True
        End If

        If (aRet) Then
            Try
                For Each hProcess As System.Diagnostics.Process In arrProcess
                    ShowWindow(hProcess.MainWindowHandle, SW_NORMAL)
                    SetForegroundWindow(hProcess.MainWindowHandle)
                    Exit For
                Next
            Catch ex As Exception

            End Try
        End If
        Return aRet
    End Function

End Module

posted on 2014-03-21 18:31  ''刺''  阅读(231)  评论(0)    收藏  举报