Datenbankverbindung über app.config

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Datenbankverbindung über app.config

    Hallo zusammen,

    ich versuche vergebens eine Verbindung zu einer Datenbank mit Hilfe der app.config herzustellen. ?(

    Microsoft Visual Studio Express 2012 für Windows Desktop
    Microsoft .NET Framework Version 4.5.51209

    Ausgangssituation ist nachfolgender Code:

    App.config:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8" ?>
    2. <configuration>
    3. <configSections>
    4. </configSections>
    5. <connectionStrings>
    6. <add name="AZE2010" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\AZE\AZE\AZE Version 1.5.accdb"
    7. providerName="System.Data.OleDb" />
    8. <add name="AZE2003" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\AZE\AZE\alte Versionen\AZE Version 1.2.mdb"
    9. providerName="System.Data.OleDb" />
    10. </connectionStrings>
    11. <startup>
    12. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
    13. </startup>
    14. </configuration>

    Programm-Code:

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Imports System.Configuration
    3. Public Class frmAnmeldung
    4. Dim oCon As New OleDb.OleDbConnection
    5. Dim oCmd As New OleDb.OleDbCommand
    6. Dim oReader As OleDb.OleDbDataReader
    7. Dim strName As String
    8. Dim strSql As String
    9. Dim sConnString As String
    10. Dim strGruppe As String
    11. Shared ConfigurationManager As Object
    12. '************************************************************************************************
    13. ' Verbindung zur Datenbank aufbauen und
    14. ' Prüfen, ob die Verbindung zur Datenbank funktioniert
    15. '************************************************************************************************
    16. Sub Verbindung()
    17. Try
    18. oCon.ConnectionString = GetConnectionStringByName("AZE2010")
    19. '*****************************************************************************
    20. '* Connectstring für MS Access ab 2007
    21. '*****************************************************************************
    22. 'oCon.ConnectionString = _
    23. ' "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    24. ' "Data Source=E:\AZE\AZE\AZE Version 1.5.accdb"
    25. '*****************************************************************************
    26. '* Connectstring für MS Access vor 2007
    27. '*****************************************************************************
    28. 'oCon.ConnectionString = _
    29. ' "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    30. ' "Data Source=E:\AZE\AZE\alte Versionen\AZE Version 1.2.mdb"
    31. oCmd.Connection = oCon
    32. oCon.Open()
    33. If oCon.State = 1 Then
    34. Me.lblAusgabe.Text = "Connect successful"
    35. Me.lblAusgabe.BackColor = Color.GreenYellow
    36. Else
    37. Me.lblAusgabe.Text = "Connect not successful"
    38. Me.lblAusgabe.BackColor = Color.Red
    39. End If
    40. Catch ex As Exception
    41. MsgBox(Err.Description)
    42. End Try
    43. End Sub
    44. '************************************************************************************************
    45. ' Aufrufen Sub Verbindung und
    46. ' ComboBox mit allen Benutzer der Tabelle [tblBenutzer] füllen
    47. '************************************************************************************************
    48. Private Sub CobBenutzer_DropDown(sender As Object, e As EventArgs) Handles CobBenutzer.DropDown
    49. Try
    50. Verbindung()
    51. oCmd.CommandText = "SELECT Benutzername FROM tblBenutzer ORDER BY Benutzername"
    52. oReader = oCmd.ExecuteReader
    53. Me.CobBenutzer.Items.Clear()
    54. Do While oReader.Read
    55. Me.CobBenutzer.Items.Add(oReader("Benutzername"))
    56. Loop
    57. oReader.Close()
    58. oCon.Close()
    59. Catch ex As Exception
    60. MsgBox(Err.Description)
    61. oCon.Close()
    62. End Try
    63. End Sub
    64. '************************************************************************************************
    65. ' Ausgewählten Benutzer zwischenspeichern
    66. '************************************************************************************************
    67. Private Sub CobBenutzer_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CobBenutzer.SelectedIndexChanged
    68. strName = Me.CobBenutzer.SelectedItem.ToString
    69. End Sub
    70. '************************************************************************************************
    71. ' Ausgewählter Benutzer und Passwort früfen
    72. '************************************************************************************************
    73. Private Sub btnAnmeldung_Click(sender As Object, e As EventArgs) Handles btnAnmeldung.Click
    74. Dim oReader As OleDb.OleDbDataReader
    75. Dim strPasswort As String
    76. Dim strGruppe As String
    77. strPasswort = Me.txtPassword.Text
    78. Me.lblFehlermeldung.Visible = True
    79. Try
    80. Verbindung()
    81. If oCon.State = 1 Then
    82. strSql = "SELECT * FROM tblBenutzer " &
    83. "WHERE Benutzername='" & strName &
    84. "' AND Passwort='" & strPasswort & "'"
    85. oCmd.CommandText = strSql
    86. oReader = oCmd.ExecuteReader
    87. If oReader.HasRows = True Then
    88. oReader.Read()
    89. strGruppe = oReader("Rechte")
    90. 'frmHome.txtGruppe.Text = strGruppe
    91. 'frmHome.txtGruppe.Visible = True
    92. frmHome.ShowDialog()
    93. Else
    94. Me.lblFehlermeldung.Visible = True
    95. End If
    96. oReader.Close()
    97. oCon.Close()
    98. Else
    99. MsgBox("Verbindung steht nicht")
    100. End If
    101. Catch ex As Exception
    102. MsgBox(ex.Message)
    103. End Try
    104. End Sub
    105. '************************************************************************************************
    106. ' Beim Laden der Form Datum bereitstellen
    107. '************************************************************************************************
    108. Private Sub frmAnmeldung_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    109. Me.lblDatum.Text = DateTime.Now.ToString("F")
    110. End Sub
    111. '************************************************************************************************
    112. ' Programm beenden
    113. '************************************************************************************************
    114. Private Sub btnAbbruch_Click(sender As Object, e As EventArgs) Handles btnAbbruch.Click
    115. Application.Exit()
    116. End Sub
    117. ' Retrieves a connection string by name.
    118. ' Returns Nothing if the name is not found.
    119. Private Shared Function GetConnectionStringByName(ByVal strName As String) As String
    120. ' Assume failure
    121. Dim returnValue As String = Nothing
    122. ' Look for the name in the connectionStrings section.
    123. Dim ConnectionString As String = ConfigurationManager.ConnectionStrings(strName)
    124. ' If found, return the connection string.
    125. If Not ConnectionString Is Nothing Then
    126. returnValue = ConnectionString
    127. End If
    128. Return returnValue
    129. End Function
    130. End Class


    Ich bekomme immer den nachfolgenden Fehler:

    Die Objektvariable oder die With-Blockvariable wurde nicht festgelegt.


    Mit Objektvariable ist ConfigurationManager gemeint, was ich beim Debuggen festgestellt habe. Kann mir aber nicht erklären warum dieser Fehler kommt.

    Für eure Hilfe besten Dank schon jetzt im Voraus ;)
    nein, der gibt nihts zurück.
    Da ist einfach oben hingeschrieben

    VB.NET-Quellcode

    1. Shared ConfigurationManager As Object
    und wird wohl angenommen, wenn man ein Objekt deklariert und ConfigurationManager nennt, dass das dann ein ConfigurationManager sei.

    @Baccus60: Warum legst du nicht einfach in den Settings einen ConnectionsString an? Dabei hilft ein Assistent, und der CS funzt dann, du brauchst keinen Code zu schreiben mit zig fail-Möglichkeiten, und inne Config landet das ebenso.

    Und vorher!!! natürliche Strict On machen, und auch gleich den Deppen-Namespace-Import entfernen. Differenzierte Begründung und Anleitung siehe Visual Studio - Empfohlene Einstellungen

    (Generell rate ich übrigens dringend ab von so Wursteleien mit DBCommands und DataReadern, aber das später.)
    Danke für den Hinweis mit der Option Strict On, habe ich bisher noch in keinem Beispiel-Code gesehen.
    @ErfinderDesRades Wie rufe ich die Settings auf? Bei My Projekt habe ich nichts gefunden! Was kann ich dann von meinem bisherigen Code weg lassen?
    Du kannst alles weglassen.
    guggemol "Datenbank in 10 MInuten" auf home.arcor.de/eckardahlers/Pro…r/Downloadpage/index.html

    Aber nur zum gucken, dass du weißt, es ist möglich und ist kinderleicht.
    Als tatsächliche Vorgehensweise empfehle ich dringend, ohne Datenbank zu entwickeln. Denn verfrüht eingebunden wird die DB mit sicherheit falsch eingebunden und damit versaust du dir alle Möglichkeiten, die Vorgehensweise (Stichwort Databinding) für eine tragfähige Architektur überhaupt zu erlernen.

    Datenverarbeitungs-Vorraussetzungen
    Zum Appetit machen kannste da ja zunächst mal in Punkt 6 reingucken - ist ebenfalls alles kinderleicht, aber ohne die Vorraussetzungen gehts halt doch nicht.