总结:Powershell 5使用64位ODBC驱动程序进行DB2。 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:OverflowException
坦率地说,我对我所使用的知识的了解非常有限,我通过复制和粘贴你专家的各种帖子而获得了成功。所以,如果答案很简单,我很抱歉,我只是没有看到它。我唯一可以控制的机器是在iSeries机器上没有管理员权限的本地PC。答案 0 :(得分: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
}