我想在PowerShell函数中打开Microsoft Access DB。我将将连接变量存储在主代码中。
这是代码:
Function open_database($dbname) {
# Open the database
try
{
$global:conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$dbname;Persist Security Info=False"
$global:conn.Open()
}
catch
{
write-host "Error connecting to the database " + $dbname
return $false
}
return $true
}
# M A I N
$conn = New-Object System.Data.OleDb.OleDbConnection
if (-Not (open_database("C:tempmydb.mdb"))) {exit}
我收到此错误消息:
错误连接到数据库 C: temp mydb.mdb
在此对象上找不到属性"连接"。验证该属性是否存在并可以设置。
我该如何修复?
我认为PowerShell将global
与conn
相关联,而不是全局与conn.ConnectionString
。
我目前尚无访问,但是无论如何,在嵌套上下文中修改全局变量是一个有缺陷的概念。最好在函数中创建连接并让其返回连接对象或抛出异常:
function open_database($dbname) {
$cn = New-Object System.Data.OleDb.OleDbConnection
$cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=$dbname;" +
"Persist Security Info=False"
$cn.Open() | Out-Null
return $cn
}
try {
$conn = open_database 'C:tempmydb.mdb'
} catch {
Write-Host "Error connecting to the database $dbname"
exit 1
}
这样,您就不会混合上下文,而您只能处理一次错误。