ADODB с провайдером MSDAORA в Powershell - PullRequest
0 голосов
/ 12 марта 2020

Я хочу использовать powershell для чтения данных из базы данных Oracle, чтобы выполнить некоторую оценку и отправить электронное письмо с результатами в список получателей.

Сначала я начал программировать показания базы данных в Excel-VBA для лучшего визуального восприятия результата, который работает просто отлично.

Sub ADODBOracle()
    Dim ADOConnection As Object : Set ADOConnection = CreateObject("ADODB.Connection")
    Dim ADORecordSet As Object : Set ADORecordSet = CreateObject("ADODB.Recordset")

    'Early binding and ADODB related enums require a reference to Microsoft ActiveX Data Objects 6.1 Library
    'Dim ADOConnection As New ADODB.Connection
    'Dim ADORecordSet As New ADODB.Recordset

    Dim Field As Variant

    Dim i As Long
    Dim j As Long

    ADOConnection.ConnectionString = "Provider=MSDAORA;Data Source=XSource;User Id=user;Password=pass;"
    ADOConnection.Open

    With ADORecordSet
        .ActiveConnection = ADOConnection
        .CursorLocation = 3 'adUseClient
        .CursorType = 3 'adOpenStatic
        .LockType = 1 'adLockReadOnly
        .Open "SELECT * from MY.Database WHERE TIMESTAMP LIKE '%11.03.20%'"
    End With

    ThisWorkbook.Sheets(1).Cells.Clear

    j = 1
    For Each Field In ADORecordSet.Fields
        ThisWorkbook.Sheets(1).Cells(1, j) = Field.Name
        ThisWorkbook.Sheets(1).Columns(j).EntireColumn.NumberFormat = "@"
        j = j + 1
    Next

    i = 2
    ADORecordSet.MoveFirst
    Application.ScreenUpdating = False

    While Not ADORecordSet.EOF: DoEvents
        For j = 1 To ADORecordSet.Fields.Count
            ThisWorkbook.Sheets(1).Cells(i, j) = ADORecordSet.Fields(ThisWorkbook.Sheets(1).Cells(1, j).Text).Value
        Next j
        i = i + 1
        ADORecordSet.MoveNext
    Wend
    Application.ScreenUpdating = True
    ADOConnection.Close
End Sub

При переписывании этого точного кода в Powershell я странно получаю сообщение об ошибке, сообщающее, что поставщик не установлен?

#CursorLocationEnum
$adUseServer = 2
$adUseClient = 3

#LockTypeEnum
$adLockReadOnly = 1
$adLockPessimistic = 2
$adLockOptimistic = 3
$adLockBatchOptimistic = 4

#CursorTypeEnum
$adOpenForwardOnly = 0
$adOpenKeyset = 1
$adOpenDynamic = 2
$adOpenStatic = 3

$ADOCon = New-Object -ComObject ADODB.Connection
$ADORec = New-Object -ComObject ADODB.Recordset

$ADOCon.ConnectionString = "Provider=MSDAORA;Data Source=XSource;User Id=user;Password=pass;"
$ADOCon.Open()
#ERROR! Provider not found / not installed

$ADORec.ActiveConnection = $ADOCon
$ADORec.CursorLocation = $adUseClient
$ADORec.CursorType = $adOpenStatic
$ADORec.LockType = $adLockReadOnly

$ADORec.Open("SELECT * from MY.Database WHERE TIMESTAMP LIKE '%11.03.20%'")
#to be done
$ADOCon.Close()

Другой вопрос на стороне: Как я могу использовать значения для перечислений ADODB (например, CursorLocationEnum) в Powershell, не создавая переменную для каждого отдельного значения?

1 Ответ

0 голосов
/ 12 марта 2020

Я нашел ответ на свой вопрос. Драйвер MSDAORA доступен только тогда, когда сеанс Powershell работает в режиме x86, но не AMD64 ...

...