【问题标题】:My catch block is being ignored我的 catch 块被忽略了
【发布时间】:2015-03-06 20:13:41
【问题描述】:

我有 400 个 IP 地址的列表要查询,但它只输出 324 个。

故障排除显示数据库事务卡在 catch{} 块中。

由于某种原因,它没有输出代码,“No data for $k”

如何排除故障?

foreach ($k in $file_line){


    $SQL = "SELECT ...
    AND [IP_ADDR1_TEXT] = '$k'"


    $cmd = New-Object System.Data.SqlClient.SqlCommand($SQL,$conn)

    $start = Get-Date
    do{
        try{
            $rdr = $NULL
            $rdr = $cmd.ExecuteReader()


            while ($rdr.read()){
                $sql_output += ,@($rdr.GetValue(0), $rdr.GetValue(1), $rdr.GetValue(2), $rdr.GetValue(3), $rdr.GetValue(4), $rdr.GetValue(5),$rdr.GetValue(6))

            }
            $transactionComplete = $true

        }
        catch{

            $transactionComplete = $false
            if (((Get-Date)-$start).TotalSeconds -gt 5) {
                Write-host "No data for $k"
                $transactionComplete = $true
            }

        }

    }until ($transactionComplete)

}

【问题讨论】:

  • 也许它没有命中 catch 块,因为它没有出错。您是否尝试在数据库中运行查询并查看返回多少结果?
  • @Siyual ---- 我输入了一个 IP 地址列表,循环遍历它。有一次,我什至打印出了所有 SQL 语句 --- 其中有 400 条,但只有 324 条被执行.... 76 条下落不明。
  • try catch 仅适用于终止错误。
  • 可能是马特所说的。尝试在脚本开头添加$ErrorActionPreference = 'Stop'

标签: sql powershell try-catch


【解决方案1】:

您可以尝试使用 Powershell ISE 或类似工具来调试您的脚本,该工具使您能够设置断点并逐步执行您的脚本。

powershell_ise.exe

有关如何在 Powershell ISE 中进行调试的说明,请查看:

https://technet.microsoft.com/de-at/library/dd819480.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2021-11-13
    • 1970-01-01
    • 2018-02-28
    • 2013-09-30
    相关资源
    最近更新 更多