AccessDB-Kennwort ändern schlägt mit Parameterübergabe fehl

  • VB.NET
  • .NET (FX) 4.0

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von VB1963.

    AccessDB-Kennwort ändern schlägt mit Parameterübergabe fehl

    Hallo Community!

    Ich ändere das Kennwort einer AccessDB (2007) mit folgenden Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' AccessKennwort ändern:
    3. ''' Ohne Kennwort: ganz einfach mit 'NULL' definieren !
    4. ''' </summary>
    5. Private Shared Function ChangeAccessPassWord(pwNew As String, pwOld As String) As Boolean
    6. If pwNew = pwOld Then Return True
    7. Dim bld As New OleDbConnectionStringBuilder(sysDataBaseConnString)
    8. If Not bld.ContainsKey("Provider") Then Return False
    9. If Not bld.ContainsKey("Data Source") Then Return False
    10. If bld.ContainsKey("Jet OLEDB:Database Password") Then bld.Remove("Jet OLEDB:Database Password")
    11. bld.Add("Jet OLEDB:Database Password", pwOld)
    12. If bld.ContainsKey("Mode") Then bld.Remove("Mode")
    13. bld.Add("Mode", 12)
    14. Using con = New OleDbConnection(bld.ConnectionString)
    15. 'Dim sql As String = "ALTER Database Password " & pwNew & " " & pwOld & ";" 'mit dieser Übergabe funktioniert das!
    16. Dim sql As String = "ALTER Database Password ? ?;" 'mit Parameterübergabe gibt es eine Exception?
    17. Using cmd = New OleDbCommand(sql, con)
    18. cmd.Parameters.Add(New OleDbParameter("@New", pwNew))
    19. cmd.Parameters.Add(New OleDbParameter("@Old", pwOld))
    20. 'Testausgabe
    21. Console.WriteLine(cmd.Parameters(0).Value.ToString)
    22. Console.WriteLine(cmd.Parameters(1).Value.ToString)
    23. '
    24. Try
    25. con.Open()
    26. cmd.ExecuteNonQuery()
    27. Return True
    28. Catch ex As OleDbException
    29. If ex.ErrorCode = -2147217843 Then Return False 'Kein zulässiges Kennwort
    30. If ex.ErrorCode = -2147467259 Then Return False 'Kennwort erwartet
    31. Return False
    32. End Try
    33. End Using
    34. End Using
    35. End Function
    In Zeile #15 frickle ich die Passwörter über einen String ein (möchte ich natürlich vermeiden)...
    In Zeile #16 versuche ich die Passwörter über die Parametersauflistung des OleDbCommand-Objektes zu übergeben...
    Mit der Version (Zeile #15) funktioniert das tadellos aber mit der Parameter-Übergabe fliegt immer wieder folgende OleDbException-Exception in Zeile #26
    ex.ErrorCode = -2147467259 'Ungültige SQL-Syntax - Kennwort erwartet'
    obwohl bei den Testausgaben die Parameter nachweislich richtig übergeben wurden. :whistling:
    Bei anderen Parameterübergaben hat das mit folgender Überschreibung
    cmd.Parameters.Add(New OleDbParameter("@X", ParamX))
    bei den Commands immer funktioniert... :whistling:
    Woran kann das liegen - ich glaube, dass die Parameter als String übergeben werden und unter Gänsefüßchen gestellt sind... :?:

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „VB1963“ ()

    Ich habe jetzt die Erklärung gefunden, wieso obiges nicht funktioniert:

    Artikelauszug aus einem Tutorial von mycsharp schrieb:

    Parameter können nur verwendet werden für SQL-Befehle der DML (Data Manipulation Language), also Select, Insert, Update, Delete. Sie sind nicht zulässig für DDL-Befehle (Data Definition Language) wie Create Table...

    ALTER ist z.B. ein DDL-Befehl...
    mycsharp.de/wbb2/thread.php?postid=3512877#post3512877