我正在尝试检测数据库连接是否成功,如果是,请继续工作,否则,报告连接错误并明显绕过数据库任务。
我很尴尬,我似乎失败了语法101。
我尝试了两种不同的方法,但都不行。
方法1
在此代码中,我似乎无法正确获取 $ connection.State = Open 语法。我可以在调试器中看到$ connection.State = Open - 我似乎无法正确测试它。
$connection = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($conninfo)
Try {$connection.open()}
Catch {Write-Warning "Sorry, DB Connect failed"}
If ($connection.State = Open) {
Write-Output "No Error"
DoWork()
$connection.Close()
}
方法2:
在此代码中,捕获了连接错误,但成功的连接未进入预期的“无错误块”。
$connection = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($conninfo)
Try {$connection.open()}
Catch {Write-Warning "Sorry, DB Connect failed"}
If (!$error) {
Write-Output "No Error"
DoWork()
$connection.Close()
}
}
答案 0 :(得分:0)
尝试{} Catch {}仅触发终止错误。尝试类似:
Try
{
$erroraction = "stop"
$connection.open()
$erroraction = "continue"
}
Catch {
Write-Warning "Sorry, DB Connect failed"
}
使用非终止错误处理
$connection.open()
if(!$?) #did the last command fail?
{
Write-Warning "Sorry, DB Connect failed"
}
编辑:我可能误解了确切的问题,但如果问题是$?
错误true
错误,那是因为它只使用 last 命令。因此,运行write-warning
的catch块成功,您需要存储$?在您希望失败的命令之后立即执行值,或者直接在catch块中设置bool以触发下一个块。
答案 1 :(得分:0)
好的,虽然它没有回答我的所有问题,但这里有工作代码:
try {
$connection.Open()
Write-Debug "No Error"
doStuffHere()
}
Catch {Write-Warning "Sorry, DB Connect failed"}
我的失败是没有记住try块内发生的任何错误导致立即退出try块并转到catch。 (实际上,这是我忘记的其中一件事我必须提醒。)
除此之外,我仍然想确定测试Connection.State以查看连接是打开还是关闭的正确方法。可能需要打开另一个问题。