2016-07-20 19 views
0

Zusammenfassung: Powershell 5 mit 64-Bit-ODBC-Treiber für DB2. SQL-Abfrage Wählen Sie "Count (*)" funktioniert. Abfrage nach aktuellen Daten "Auswahlfeld" gibt einen Fehler zurück. 32-Bit-ODBC-Treiber wird überhaupt nicht funktionieren. Eine Antwort hier zeigte auf eine ODBC-Einstellung (binäre Daten konvertieren) für die Konvertierung, aber das Problem wurde nicht gelöst.Powershell iSeries DB2 ODBC gibt "Arithmetische Operation führte zu einem Überlauf" zurück.

Code:

$SqlQuery = @" 
SELECT MMITNO, 
     MMITDS 
FROM MITMAS 
WHERE MMCONO = 3 
    AND MMITNO = '2658591351' 
"@ 

$Db2Connection = new-object system.data.odbc.odbcconnection 
$Db2Connection.connectionstring = "DSN=DB2_MR0P_64;Userid=USSRF_ADM;Password=########" 
$Db2Connection.open() 

# Set up to run the query 
$SqlCmd = New-Object system.Data.Odbc.OdbcCommand($SqlQuery,$Db2Connection) 
$DataAdapter = New-Object system.Data.Odbc.OdbcDataAdapter($SqlCmd) 
$DataTable = New-Object system.Data.datatable 
$RowCount = $DataAdapter.fill($DataTable) 

$Db2Connection.close() 

# Process the returned datatable 
$DataTable.Table[0] | ForEach-object { 
    write-host "Total rows in MITMAS is $("{0:N0}" -f $_)." 
} 

Returns: Exception "Fill" mit "1" Argumente Aufruf (e): "führte Rechenoperation in einem Überlauf." unter C: \ PowerShellScripts \ TestDB2.ps1: 19 Zeichen: 1 + $ RowCount = $ DataAdapter.Fill ($ Table) + ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: Overflow

Um ganz ehrlich zu sein, mein Wissen von dem, was ich benutze, ist sehr begrenzt und ich war erfolgreich durch das Kopieren und Einfügen verschiedener Beiträge von Ihnen Experten. Also, ich entschuldige mich, wenn die Antwort einfach ist und ich es einfach nicht sehe. Die einzige Maschine, die ich kontrollieren kann, ist der lokale PC ohne Administratorrechte auf der iSeries-Maschine.

+0

Es sieht aus wie Sie die Verbindung dann sind Schließen versuchen, Daten von ihm zu lesen. Ich würde versuchen, die Verbindung zu schließen, nachdem Sie die Daten gelesen haben. –

+0

Gleiche Ergebnisse, wenn ich die $ Db2Connection.close() nach der Write-Host-Anweisung verschieben. Der Fehler tritt vor der Ausführung von close() auf. Dies geschieht während der Ausführung der Füllung ($ DataTable). – RickInGarland

+0

Klingt nach etwas, das jemand vertrauter mit iSeries oder dieser Datenbank beantworten müsste. Sie können auch eine ODBC-Verbindung von einer anderen Anwendung (z. B. Excel) erstellen und feststellen, ob Sie andere Ergebnisse erhalten. –

Antwort

0

Die Füllmethode funktioniert mit dem Dataset, nicht mit der Datentabelle. ändern Sie wie folgt Code:

$DataAdapter = new-object System.Data.odbc.odbcDataAdapter($SqlCmd) 
$DataSet = new-object System.Data.DataSet 
$DataAdapter.Fill($DataSet) 
foreach ($Row in $DataSet.Tables[0].Rows) 
{ 
    #your traitment here 
} 
+0

Danke für die Korrektur. Die neue Füllung gibt jedoch immer noch die gleiche "Arithmetische Operation, die zu einem Überlauf führte". Error. – RickInGarland

+0

MMCONO ist ein numerisches Feld oder ein Zeichenfeld? – Esperento57

+0

Es ist dezimal (3 lang, 0 Dezimalstellen) – RickInGarland