Powershell数据库连接错误检测和错误处理

时间:2018-03-07 18:04:51

标签: powershell error-handling database-connection

我正在尝试检测数据库连接是否成功,如果是,请继续工作,否则,报告连接错误并明显绕过数据库任务。

我很尴尬,我似乎失败了语法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()
       }
}

2 个答案:

答案 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以查看连接是打开还是关闭的正确方法。可能需要打开另一个问题。