【问题标题】:Powershell database connection error detection and error handlingPowershell 数据库连接错误检测和错误处理
【发布时间】:2018-03-07 18:04:51
【问题描述】:

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

我很尴尬,我似乎没有通过语法 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()
       }
}

【问题讨论】:

  • 尝试使用$? 而不是!$error$? 如果最后一个命令成功则返回 true,如果有错误则返回 false。
  • @TheMadTechnician 连接失败错误地落入无错误分支。

标签: powershell error-handling database-connection


【解决方案1】:

Try{}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 命令。所以你的catch块运行write-warning是成功的,你需要存储$?在您期望失败的命令之后立即设置值,或者直接在 catch 块中设置一个布尔值以触发您的下一个块。

【讨论】:

    【解决方案2】:

    好的,虽然它没有回答我所有的问题,但这里是工作代码:

       try {
                $connection.Open()
    
                Write-Debug "No Error"
    
                 doStuffHere()
             }
        Catch {Write-Warning "Sorry, DB Connect failed"}
    

    我的失败是不记得 try 块内发生的任何错误导致立即退出 try 块并进入 catch。 (实际上,这是我忘记的事情之一——我必须被提醒。)

    除此之外,我仍然想确定测试 Connection.State 以查看连接是打开还是关闭的正确方法。可能需要打开另一个问题。

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 2012-01-21
      • 1970-01-01
      相关资源
      最近更新 更多