首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Access数据库加速PowerShell脚本

使用Access数据库加速PowerShell脚本
EN

Stack Overflow用户
提问于 2017-01-27 20:16:32
回答 1查看 173关注 0票数 0

我有一个脚本,这是基本读取csv文件和搜索相关的ms-access数据库记录,并更新它们。问题是它在100-150条记录后变得越来越慢。有没有人能对此发表意见。但请考虑到第一个记录是快速实现的,这就是为什么它对我来说是奇怪的问题。顺便说一下,脚本在本地pc上运行,而不是在服务器上运行。

代码语言:javascript
复制
$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
EN

回答 1

Stack Overflow用户

发布于 2017-01-27 22:19:08

我解决了。使用Open function创建select语句是一个错误的决定。一次获取所有数据,并使用RS.Filter对其进行过滤,这将是一个彻底的解决方案。

$rs.Filter="Column1='"+$param1+"‘和Column2="+$param2

计算和升级后,ir可以通过以下方式清除

$rs.Filter=0

谢谢

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41893823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档