【问题标题】:Powershell iSeries DB2 ODBC returns "Arithmetic operation resulted in an overflow."Powershell iSeries DB2 ODBC 返回“算术运算导致溢出”。
【发布时间】: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


【解决方案1】:

填充方法适用于数据集,而不是数据表。 像这样修改你的代码:

 $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
 }

【讨论】:

  • 感谢指正。但是,新的 Fill 仍然给出相同的“算术运算导致溢出”。错误。
  • MMCONO 是数字字段还是字符字段?
  • 十进制(3位长,0位小数)
  • 你能把你所有的代码、错误信息和你的表的描述写下来吗?
  • 整个程序在我原来的帖子里。在我发现问题后,我从程序中删除了所有的绒毛,以消除其他可能的原因。错误也在原帖中。
猜你喜欢
  • 2011-05-15
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多