Programmabsturz bei Execute-Reader/-Scalar/-NonQuery

  • VB.NET
  • .NET (FX) 3.0–3.5

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

    Programmabsturz bei Execute-Reader/-Scalar/-NonQuery

    Hallo alle miteinander,

    vor kurzem bin ich über VBA (Excel) zur Visual Basic Studio 2010 Express Edition gekommen und versuche mich nun daran ein Dienstplanprogramm zu erstellen. Seit einiger Zeit hänge ich jedoch an folgendem Codefragment:

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class NeueSchicht
    3. Public intMitarbeiterID
    4. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    5. Dim strVorname As String
    6. Dim strNachname As String
    7. Dim strComboboxText As String
    8. Dim intMitarbeiterID As Integer
    9. strComboboxText = ComboBox1.Text
    10. strVorname = Microsoft.VisualBasic.Left(ComboBox1.Text, InStr(ComboBox1.Text, " ") - 1)
    11. strNachname = Microsoft.VisualBasic.Right(strComboboxText, Len(strComboboxText) - InStr(strComboboxText, " "))
    12. Dim MitarbeiterID As New DbAbfrage("SELECT MitarbeiterID FROM tblMitarbeiter WHERE Vorname = ? AND Nachname = ?")
    13. MitarbeiterID.command.Parameters.Add(New OleDbParameter("paramVorname", strVorname))
    14. MitarbeiterID.command.Parameters.Add(New OleDbParameter("paramNachname", strNachname))
    15. MitarbeiterID.ExecuteReader()
    16. Do While MitarbeiterID.reader.Read
    17. intMitarbeiterID = MitarbeiterID.reader("MitarbeiterID")
    18. Loop
    19. MitarbeiterID.DbSchließen()
    20. MitarbeiterID = Nothing
    21. End Sub
    22. End Class

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class DbAbfrage
    3. Public connection As New OleDbConnection
    4. Public command As New OleDbCommand
    5. Public reader As OleDbDataReader
    6. Public NonQueryErgebnis As Integer
    7. Sub New(ByVal CommandText As String)
    8. connection.ConnectionString = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=C:\Users\Home\Desktop\Thomas\Dienstplan\Dienstplan\DienstplanDatenbank.sdf"
    9. command.Connection = connection
    10. command.CommandText = CommandText
    11. End Sub
    12. Sub ExecuteNonQuery()
    13. Try
    14. connection.Open()
    15. NonQueryErgebnis = command.ExecuteNonQuery
    16. Catch ex As Exception
    17. MessageBox.Show(ex.Message)
    18. End Try
    19. End Sub
    20. Sub ExecuteReader()
    21. Try
    22. connection.Open()
    23. reader = command.ExecuteReader()
    24. Catch ex As Exception
    25. MessageBox.Show(ex.Message)
    26. End Try
    27. End Sub
    28. End Class


    Fehlerbeschreibung:
    Der Code läuft Problemlos bis Zeile 22. Beim ausführen dieser Zeile springt das Programm logischerweise in Zeile 26. der Klasse DBAbfrage. Beim ausführen der Zeile 29 "reader = command.ExecuteReader()" beendet sich das Programm sang und klanglos selbst. Weder der try/catch-Block noch VisualBasic selbst geben einen Fehler zurück. Alle geöffneten UserForms "unloaden" und ich werde zurück auf die Studio Express Oberfläche geworfen. Die Ausführung des Codes wird an dieser Stelle abgebrochen. Selbiges gilt bei den Methoden ExecuteNonQuery und ExecuteScalar.

    Als Datenquelle habe ich eine lokale Datenbank hinzugefügt.

    Was ist hier los? Langsam bin ich wirklich am verzweifeln dabei spüre ich, dass die Lösung vielleicht wie immer nur ein falsches Komma entfernt liegt. ;)
    Hier noch eine Frage am Rande: Ist eine lokale Datenbank für eine solche Anwendung die richtige Wahl? (Vorausgesetzt es kommt nur an einem Rechner zur Anwendung)

    Danke für die Unterstützung und viele Grüße
    willst du dir nicht erstmal ausführlich angucken, was in Ado.Net und Framework-Databinding eiglich vorgesehen ist an Technologie?

    gugge "Datenbank in 10 Minuten" auf Movie-Tuts oder Forms over Data Videos

    Bevor du da anfängst, kilometerlangen Code für jede einzelne Tabelle zu verfassen? Wenn da Änderungen am Datenmodell erforderlich werden - da kann man suizidal werden, bei deim Ansatz.

    Ausserdem brauchst du noch die vier Views-Videos, damit man die Daten auch sehen und anfassen kann.
    Vielen Dank für das Material, werde ich mir gleich mal zu Gemüte führen. Der Code ist natürlich gekürzt. Den "sehen und anfassen"-Part habe ich bewusst weggelassen.
    Indes ist meine Frage noch nicht geklärt. Handelt es sich hier möglicherweise um einen Bug? Ein Absturz ohne jegliche Rückmeldung kommt mir schon sehr mysteriös vor.
    sry - diese deine Frage kann ich nicht klären - bei mir tritt solch Fehler nicht auf, und abgesehen davon, dass du scheinbar SqlCe mit OleDb abfragst, ist mir nix besonderes aufgefallen.
    Hast du mal versucht SqlCe mit dem dafür vorgesehenen Instrumentarium (Namespace System.Data.SqlServerCe) abzufragen, ob das auch abstürzt?

    zu einer anneren Frage kann ich mich äussern:

    TheProfessor schrieb:

    Frage am Rande: Ist eine lokale Datenbank für eine solche Anwendung die richtige Wahl?
    Kommt auf die anfallende Datenmenge an.
    Bis ca. 20000 Datensätze braucht man überhaupt keine Datenbank, sondern kann das typisierte Dataset direkt auf Platte schreiben.
    Und ich predige immer: Entwickelt eure Db-Anwendungen DatasetOnly! Man sitzt mitunter jahrelang an einer Entwicklung, und ohne das DB-Zugriffs-Theater ist man sicherlich Monate früher fertig. Eine DB kann man immer noch zu allerletzt hinterlegen - wenn man mein Tool dafür verwendet geht das in 5 Minuten.