【发布时间】:2016-07-20 21:23:52
【问题描述】:
总结:Powershell 5 使用 DB2 的 64 位 ODBC 驱动程序。 SQL 查询选择“Count(*)”有效。查询实际数据“选择字段”返回错误。 32 位 ODBC 驱动程序根本不起作用。这里的一个答案指向用于转换的 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”个参数调用“填充”的异常:“算术运算导致溢出。” 在 C:\PowerShellScripts\TestDB2.ps1:19 char:1 + $RowCount = $DataAdapter.fill($DataTable) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : 溢出异常
坦率地说,我对我所使用的东西的了解非常有限,我通过复制和粘贴各位专家的各种帖子取得了成功。所以,如果答案很简单,我只是没有看到它,我很抱歉。我唯一可以控制的机器是在 iSeries 机器上没有管理员权限的本地 PC。
【问题讨论】:
-
看起来您正在关闭连接,然后尝试从中读取数据。我会尝试关闭连接在你读完数据之后。
-
如果我将 $Db2Connection.close() 移到 Write-host 语句之后,结果相同。错误发生在执行 close() 之前。它发生在执行填充($DataTable)期间。
-
听起来像是更熟悉 iSeries 或该数据库的人需要回答的问题。您还可以从另一个应用程序(例如 Excel)创建 ODBC 连接,看看是否会得到不同的结果。
-
使用 32 位版本的 ODBC 驱动程序在 Microsoft Access 2013 中可以使用相同的查询。
-
听起来你有一个解决方法。我不知道您如何在 PowerShell 中完成这项工作;对不起。
标签: powershell db2 odbc