我有一个powershell脚本,用于从Access数据库文件中获取数据。它工作得很好,但是我这样做的方式(通过循环几百个员工记录),它会对数据库文件进行多次查询。由于此脚本每隔几分钟运行一次,因此我收到了很多对数据库的请求。 为了提高性能并避免对数据库提出如此多的请求,我想我在技术上每个表只能执行一个请求,并将整个表存储在一个变量(可能是一个哈希表或数组)中;然后在脚本中我可以只为每个员工获取数据,而无需进行其他数据库查询。 有谁知道这样的事情是否可能?或者我是否坚持选择只在每个循环中建立一个与数据库的新连接?
编辑:
只是为了澄清:我不知道如何将表(对象集合)变成像@mjolin这样的变量,在响应中命名它:$ table [0]。
这就是我所拥有的:
$objEmergencyMaster = New-Object -comobject ADODB.Recordset
$objEmergencyMaster_SQL = "SELECT * FROM [Emergency Master] WHERE [Emergency #] = " + $emergency_nr
$objEmergencyMaster.Open($objEmergencyMaster_SQL, $objConnection,$adOpenStatic,$adLockOptimistic)
在此之后,我执行以下操作以获得单个值:
$group_id = $objEmergencyMaster.Fields.Item("Group ID").Value
我希望这是有道理的
谢谢!
P.S。如何在此处格式化代码?我尝试用四个空格缩进它并不起作用!
答案 0 :(得分:0)
完全有可能。如果它只有几百条记录,您可以从数据库记录创建自定义PS对象,并将它们存储在数组或哈希表中,并键入一些唯一的员工标识符。
问题是数据的易变性。如果数据在数据库中得到更新,那么在重新读取数据库并重建这些对象之前,您的脚本将不会看到这些更改。
编辑:
从数据库中获得一组对象(例如$ Table [0])后,如果要通过例如$雇员:
$Employees = @{}
Foreach ($Record in $Table[0])
{ $Employees[$Record.EmployeeID] = $Record }