Ich möchte eine Microsoft Access DB in einer PowerShell-Funktion öffnen. Ich werde die Verbindungsvariable im Hauptcode speichern.globale Variable, wo Variable Mitglieder hat
Dies ist der Code:
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}
ich diese Fehlermeldung:
Fehler in der Datenbank + C Anschluss: \ temp \ MyDB.mdb
Die Eigenschaft 'Connectionstring' kann nicht auf diesem Objekt gefunden werden. Stellen Sie sicher, dass die Eigenschaft existiert und festgelegt werden kann.
Wie kann ich das beheben?
Ich denke PowerShell verbindet global
mit conn
und nicht global mit conn.ConnectionString
.
Aber der Code in Ihrer Frage gibt diesen Fehler nicht? Ich habe keine Zugriffsdatenbank zur Hand, aber es ist kein Fehler, es läuft ohne Beanstandung. Und es sollte, wenn ich Testcode in einen Kommentar schreiben kann - 'Funktionstest {$ global: c.x = 4}; $ c = @ {x = 2}; $ c; Prüfung; $ c' Zugriff auf eine Eigenschaft eines globalen tut Arbeit. – TessellatingHeckler
Ich würde versuchen, alle "Try_Catch" -Strukturen zu Debugging-Zwecken wegzulassen. Verwenden Sie bare _inner_ des 'Try'-Blocks und dann' return $ false', um _full_spezification_ möglicher Fehler zu sehen. Ist $ global: conn definiert als erwartet? '$ conn = ...' bei '# main' ist im Bereich _script_ definiert. Ist der OLEDB-Anbieter registriert? ... – JosefZ