变量具有成员的全局变量

时间:2016-06-30 00:38:01

标签: powershell global-variables

我想在PowerShell函数中打开Microsoft Access数据库。我将连接变量存储在主代码中。

这是代码:

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:\temp\mydb.mdb"))) {exit}

我收到此错误消息:

  

连接数据库时出错+ C:\ temp \ mydb.mdb
  属性' ConnectionString'在这个对象上找不到。验证该属性是否存在且可以设置。

我该如何解决这个问题?

我认为PowerShell正在将globalconn相关联,而不是将conn.ConnectionString与全局相关联。

1 个答案:

答案 0 :(得分:0)

我目前没有Access可用,但是在嵌套上下文中修改全局变量无论如何都是一个有缺陷的概念。最好在函数中创建连接,让它返回连接对象或抛出异常:

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:\temp\mydb.mdb'
} catch {
  Write-Host "Error connecting to the database $dbname"
  exit 1
}

这样你就不会混合上下文,而且你只会进行一次错误处理。