我有一个脚本,这是基本读取csv文件和搜索相关的ms-access数据库记录,并更新它们。问题是它在100-150条记录后变得越来越慢。有没有人能对此发表意见。但请考虑到第一个记录是快速实现的,这就是为什么它对我来说是奇怪的问题。顺便说一下,脚本在本地pc上运行,而不是在服务器上运行。
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset
$cn.Open("Provider = Microsoft.ACE.OLEDB.12.0;Data Source = $path")
Write-Host "database connection established"
$data = Import-Csv $csvfile
$data =$data | Where-Object{$_.b}
$itemNo=0
$dp=1
$fp=1
$total=0
$Verkaufsbeleg=0
$Verkaufsbelegposition=0
foreach ($element in $data) {
if($itemNo -ne $element.d + $element.f -and $element.d){
$itemNo=$element.d + $element.f
$Verkaufsbeleg=$element.d
$Verkaufsbelegposition=$element.f
$param1= [convert]::ToInt32($Verkaufsbeleg, 10)
$param2=[convert]::ToInt32($Verkaufsbelegposition, 10)
write-host $param1
write-host $param2
$dp=0
$fp=0
$position=99
}
if($element.k -eq $something){
$dp++
}elseif($element.k -eq $something){
$fp++
}
$rs.Open("Select * From Projects where ([Column1]='"+$param1+"' and [Column2]="+$param2+")", $cn,$adOpenStatic,$adLockOptimistic)
While ($rs.EOF -ne $True) {
$value=$element.i
if($element.k -eq $something){
$rs.Fields.Item("DP")=$value
$total++
}
if($element.k -eq $something){
$rs.Fields.Item("FP")=$value
$total++
}
write-host "Index" $rs.AbsolutePosition
$rs.MoveNext()
}
$rs.Close()
$rs= new-object -comobject ADODB.Recordset
}
$cn.Close()
Write-Host "Total Items Updated" $total发布于 2017-01-27 22:19:08
我解决了。使用Open function创建select语句是一个错误的决定。一次获取所有数据,并使用RS.Filter对其进行过滤,这将是一个彻底的解决方案。
$rs.Filter="Column1='"+$param1+"‘和Column2="+$param2
计算和升级后,ir可以通过以下方式清除
$rs.Filter=0
谢谢
https://stackoverflow.com/questions/41893823
复制相似问题