2016-07-20 66 views
0

摘要:Powershell 5使用DB2的64位ODBC驅動程序。 SQL查詢選擇「計數(*)」的作品。查詢實際數據「選擇字段」返回錯誤。 32位ODBC驅動程序根本無法工作。這裏的一個答案指向了用於轉換的ODBC設置(轉換二進制數據...),但沒有解決問題。Powershell iSeries DB2 ODBC返回「算術運算導致溢出。」

代碼:

$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 $_)." 
} 

返回: 異常調用 「填充」 和 「1」 的說法(S): 「算術運算導致溢出。」 在C:\ PowerShellScripts \ TestDB2.ps1:19 char:1 + $ RowCount = $ DataAdapter.fill($ DataTable) + ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:發生OverflowException

坦率地說,我的知識我使用的是非常有限的,我通過複製和粘貼各位專家的帖子獲得了成功。所以,我很抱歉,如果答案很簡單,我只是沒有看到它。我唯一可以控制的機器是iSeries機器上沒有管理權限的本地PC。

+0

看起來你正在關閉連接,然後試圖從中讀取數據。我會嘗試在閱讀數據之後關閉連接。 –

+0

如果我將$ Db2Connection.close()移到Write-host語句之後,結果相同。錯誤發生在執行close()之前。它發生在填充($ DataTable)的執行過程中。 – RickInGarland

+0

聽起來像某人更熟悉iSeries或該數據庫需要回答的東西。您也可以從另一個應用程序(例如Excel)創建一個ODBC連接,並查看您是否得到不同的結果。 –

回答

0

填充方法使用數據集,而不是數據表。 修改你的代碼是這樣的:

$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

感謝您的更正。但是,新的填充仍然會給出相同的「算術運算導致溢出」。錯誤。 – RickInGarland

+0

MMCONO是一個數字字段還是一個char字段? – Esperento57

+0

這是十進制(3長,0小數) – RickInGarland

相關問題