使用Access数据库

时间:2017-01-27 12:16:32

标签: performance powershell ms-access ado

我有一个脚本,它基本上读取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

1 个答案:

答案 0 :(得分:1)

我解决了。使用Open函数制作select语句是一个错误的决定。一次性获取所有数据并使用RS.Filter对其进行过滤将是一个完整的解决方案。

$ rs.Filter =“[Column1] ='”+ $ param1 +“'和[Column2] =”+ $ param2

计算和升级后,可以通过

清除ir

$ rs.Filter = 0

由于