Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 使用Access数据库加速PowerShell脚本_Performance_Powershell_Ms Access_Ado - Fatal编程技术网

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

Performance 使用Access数据库加速PowerShell脚本,performance,powershell,ms-access,ado,Performance,Powershell,Ms Access,Ado,我有一个脚本,基本上是读取csv文件,搜索相关的ms access数据库记录并更新它们。问题是它在100-150条记录之后变得越来越慢。有人能对这件事有意见吗。但请考虑第一个记录是快速实施,这就是为什么它的奇怪问题对我来说。顺便说一下,脚本在本地pc上运行,而不是在服务器上运行 $adOpenStatic=3 $adlock=3 $cn=新对象-comobject ADODB.Connection $rs=新对象-comobject ADODB.Recordset $cn.Open(“Provi

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

$adOpenStatic=3
$adlock=3
$cn=新对象-comobject ADODB.Connection
$rs=新对象-comobject ADODB.Recordset
$cn.Open(“Provider=Microsoft.ACE.OLEDB.12.0;数据源=$path”)
写入主机“已建立数据库连接”
$data=导入Csv$csvfile
$data=$data |其中对象{$\.b}
$itemNo=0
$dp=1
$fp=1
$total=0
$Verkaufsbeleg=0
$Verkaufsbelegposition=0
foreach($data中的元素){
如果($itemNo-ne$element.d+$element.f-和$element.d){
$itemNo=$element.d+$element.f
$Verkaufsbeleg=$element.d
$Verkaufsbelegposition=$element.f
$param1=[convert]::ToInt32($Verkaufsbeleg,10)
$param2=[convert]::ToInt32($Verkaufsbelegposition,10)
写入主机$param1
写入主机$param2
$dp=0
$fp=0
$position=99
}
如果($element.k-eq$something){
$dp++
}elseif($element.k-eq$something){
$fp++
}
$rs.Open(“从项目中选择*,其中([Column1]='“+$param1+”'和[Column2]=“+$param2+”)”),$cn、$adOpenStatic、$adlockoptimize)
而($s.EOF-ne$True){
$value=$element.i
如果($element.k-eq$something){
$rs.Fields.Item(“DP”)=$value
$total++
}
如果($element.k-eq$something){
$rs.Fields.Item(“FP”)=$value
$total++
}
写入主机“索引”$rs.AbsolutePosition
$rs.MoveNext()
}      
$rs.Close()
$rs=新对象-comobject ADODB.Recordset
} 
$cn.Close()
写入主机“更新的项目总数”$Total

我解决了。使用Open函数生成select语句是一个错误的决定。一次获取所有数据并使用RS进行过滤。过滤器将是一个完整的解决方案

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

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

$rs.Filter=0


谢谢

您打开rs一次,然后进行阅读和循环,最后关闭rs。