【发布时间】: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