InterSystems ODBC 错误导致 Powershell 崩溃
InterSystems ODBC error crashes Powershell
我正在尝试使用 Powershell 通过 InterSystems ODBC 驱动程序获取一些数据,但查询执行时出现错误(01004“字符串数据,右 运行 已分类”)。我想忽略它(或在 PS 中处理此错误)并继续执行脚本。这是我的代码的一部分:
$c = new-object system.data.odbc.odbcconnection
$c.connectionstring = "..."
$c.open()
$cmd = New-object System.Data.Odbc.OdbcCommand( $sql , $c )
$dst = New-Object System.Data.DataSet
$oda = New-Object System.Data.Odbc.OdbcDataAdapter( $cmd )
$oda.Fill( $dst )
当我使用 -NoExit 参数 运行 脚本时,这有效,即不会崩溃并获取数据,即:
Powershell -NoExit Y:\test.ps1
否则,Powershell 崩溃,控制台关闭。我需要从另一个脚本 运行 这个脚本并最终收到结果。最后,我想关闭控制台 window(现在我通过 exit
调用它)。
到目前为止,我尝试了 try-catch
块、抛出、Invoke-Expression
、return
函数等。我搜索了解决此类错误的解决方案,但没有结果。
我找到了解决方案(或者可能是解决方法)。最好使用 ADODB 对象而不是 System.Data.Odbc。最直接的代码如下所示:
$connection = New-Object -ComObject ADODB.Connection
$command = New-Object -ComObject ADODB.Command
$recordset = New-Object -ComObject ADODB.Recordset
$connection.CursorLocation = 3
$connection.ConnectionString = $c_s
$connection.Open()
$command.ActiveConnection = $connection
$command.CommandText = $sql
$command.CommandType = 1
$recordset.ActiveConnection = $connection
$recordset.Open( $command )
我正在尝试使用 Powershell 通过 InterSystems ODBC 驱动程序获取一些数据,但查询执行时出现错误(01004“字符串数据,右 运行 已分类”)。我想忽略它(或在 PS 中处理此错误)并继续执行脚本。这是我的代码的一部分:
$c = new-object system.data.odbc.odbcconnection
$c.connectionstring = "..."
$c.open()
$cmd = New-object System.Data.Odbc.OdbcCommand( $sql , $c )
$dst = New-Object System.Data.DataSet
$oda = New-Object System.Data.Odbc.OdbcDataAdapter( $cmd )
$oda.Fill( $dst )
当我使用 -NoExit 参数 运行 脚本时,这有效,即不会崩溃并获取数据,即:
Powershell -NoExit Y:\test.ps1
否则,Powershell 崩溃,控制台关闭。我需要从另一个脚本 运行 这个脚本并最终收到结果。最后,我想关闭控制台 window(现在我通过 exit
调用它)。
到目前为止,我尝试了 try-catch
块、抛出、Invoke-Expression
、return
函数等。我搜索了解决此类错误的解决方案,但没有结果。
我找到了解决方案(或者可能是解决方法)。最好使用 ADODB 对象而不是 System.Data.Odbc。最直接的代码如下所示:
$connection = New-Object -ComObject ADODB.Connection
$command = New-Object -ComObject ADODB.Command
$recordset = New-Object -ComObject ADODB.Recordset
$connection.CursorLocation = 3
$connection.ConnectionString = $c_s
$connection.Open()
$command.ActiveConnection = $connection
$command.CommandText = $sql
$command.CommandType = 1
$recordset.ActiveConnection = $connection
$recordset.Open( $command )