merkwürdige Fehlermeldung beim Auslesen SQLite

  • VB.NET

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

    merkwürdige Fehlermeldung beim Auslesen SQLite

    Moin!

    ich habe vor längerer Zeit eine Anwendung geschrieben bei der Daten aus einer SQLite-Datei gelesen werden.

    Nun habe ich in den Datentabellen ein Feld durch ein anderes ersetzt - das ist nicht weiter kritisch, da dieses nur in dem Where-Statement zum Tragen kommt.

    Wenn ich den zugehörigen SQL-Ausdruck ausführe, dann werden alle drei gewünschten Spalten Mail, Surname und Firstname DB Browser for SQLite angezeigt.

    Bin ich nun im Code, dann bekomme ich für die Zeile, die Mail ausliest folgende Fehlermeldung ausgeworfen:



    Hier der zugehörige Code:

    Spoiler anzeigen

    Quellcode

    1. ''' <summary>
    2. ''' Auslesen der E-Mails aus der Liste
    3. ''' </summary>
    4. Private Sub UpdateEMailList_Tab1()
    5. Dim fEmail As FUNC_Email = New FUNC_Email
    6. Dim SQL As String = ""
    7. Select Case _What2Outlook
    8. Case PrgType.Acad
    9. SQL = String.Format("SELECT u.EMAIL MAIL ,u.NACHNAME SURNAME, u.VORNAME FIRSTNAME FROM ACAD_INSTALL_{0} ac, ANWENDER u, RECHNER r WHERE (ac.INST_ACAD=3 OR ac.INST_ACAD=4) AND r.ID = ac.ID_RECHNER AND ac.ID>1 AND r.ID_ANWENDER=u.ID ORDER BY u.NACHNAME, u.VORNAME", _AcadVersion)
    10. Case PrgType.Topobase
    11. SQL = String.Format("SELECT u.EMAIL Mail ,u.NACHNAME SURNAME, u.VORNAME FIRSTNAME FROM ACAD_INSTALL_{0} ac, ANWENDER u, RECHNER r WHERE ac.INST_ORACLE_64BIT>2 AND r.ID = ac.ID_RECHNER AND ac.ID>1 AND r.ID_ANWENDER=u.ID ORDER BY u.NACHNAME, u.VORNAME", _AcadVersion)
    12. Case Else
    13. MessageBox.Show("Ungültige Auswahl!")
    14. Exit Sub
    15. End Select
    16. lb_error_tab1.Items.Clear()
    17. With lb_email_tab1
    18. .Items.Clear()
    19. Dim SQLconnect As New SQLite.SQLiteConnection()
    20. Dim SQLcommand As SQLiteCommand
    21. SQLconnect.ConnectionString = String.Format("Data Source={0}", _SqLiteDB)
    22. SQLconnect.Open()
    23. SQLcommand = SQLconnect.CreateCommand
    24. SQLcommand.CommandText = SQL
    25. Dim SQLreader As SQLiteDataReader = SQLcommand.ExecuteReader()
    26. Dim tmpEmail As List(Of String) = New List(Of String)
    27. Dim tmpError As List(Of String) = New List(Of String)
    28. While SQLreader.Read()
    29. Dim EMail As String = SQLreader("MAIL").ToString.ToLower
    30. Dim Nachname As String = CType(SQLreader("SURNAME"), String)
    31. Dim Vorname As String = CType(SQLreader("FIRSTNAME"), String)
    32. Dim Fullname As String = Nachname
    33. If Vorname.Length > 0 Then Fullname += ", " & Vorname
    34. If Not EMail.ToLower = "dummy" Then 'dummy wird ingnoriert
    35. If EMail.Length = 0 Then
    36. Dim Msg As String = Fullname & " - keine Adresse"
    37. If tmpError.Contains(Msg) = False Then tmpError.Add(Msg)
    38. Else
    39. If fEmail.ValiEmail(EMail) = False Then
    40. Dim Msg As String = EMail & " - ungültige Adresse"
    41. If tmpError.Contains(Msg) = False Then tmpError.Add(Msg)
    42. Else
    43. If tmpEmail.Contains(EMail) = False Then tmpEmail.Add(EMail)
    44. End If
    45. End If
    46. End If
    47. End While
    48. ' jetzt in die Liste aufnehmen
    49. For i As Integer = 0 To tmpEmail.Count - 1
    50. lb_email_tab1.Items.Add(tmpEmail(i))
    51. Next
    52. For i As Integer = 0 To tmpError.Count - 1
    53. lb_error_tab1.Items.Add(tmpError(i))
    54. Next
    55. lbl_email_tab1.Text = String.Format("E-Mail-Adressen ({0})", lb_email_tab1.Items.Count.ToString)
    56. lbl_error_tab1.Text = String.Format("Namen ohne E-Mail ({0})", lb_error_tab1.Items.Count.ToString)
    57. SQLcommand.Dispose()
    58. SQLconnect.Close()
    59. End With
    60. End Sub


    Hat einer von Euch eine Idee warum es zu dem Fehler kommen könnte?

    Habe jetzt nochmal ein Try-Catch um die E-Mail gelegt - da kommt aber nichts.

    Was mich nur verwundert ist die Tatsache, dass Mail wohl ein NULL liefert obwohl in dem SQL-Abfrageergebnis ein Ergebnis steht!

    Gruß Jan

    *Topic verschoben*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    bitte benutze zum Einstellen von vb.net-Code den vb.net-Tag!!

    Kannst du die Fehlermeldung nicht vollständiger erhalten?
    Bei mir kommt da ein Fenster, und da kann ich "Copy Details" drücken, dann ist das in der Zwischenablage, und ich kanns in Notepad einpasten.
    Bei mir bestehen Fehlermeldungen immer aus vielen Zeilen - nicht nur son fummeliger Intellisense-Tooltip.

    Mein erster Gedanke zum Fehler ist: Das Command des Readers ruft keine Spalte "Mail" ab - dann ists natürlich eine invalid Operation, wenn man vom Reader dann einen Wert für "Mail" abrufen will.
    Moin!
    so ich habe mir die Angelegen heute morgen noch einmal genauer angesehen.

    Im SVN ist zu erkennen, dass sich am Code, bis auf die eine Anpassung im SQL-Ausdruck bei Where nichts geändert hat. Darüber hinaus gibt es einen zweiten unveränderten SQL-Ausdruck mit anderer Where-Abfrage und auch dort funktioniert es nicht.

    Dann habe ich den Debugger aktiviert und den generierten SQL-Ausdruck in DB Browser for SQLite kopiert und es werden alle Daten angezeigt die ich haben möchte.



    Lasse ich mir die ermittlten Daten anzeigen, dann sieht man, dass aus dem SQL nur der SURNAME richtig angezeigt wird. Für MAIL und FIRSTNAME wird "0" angezeigt.



    Dann kam mir aber eben ein Gedanke - warum zeigt der "0" als Zeichenkette an und gibt einen Zahlenwert als String im vb.net aus?

    Nochmal in die Defintion geschaut und siehe da...



    Die beiden Felder waren REAL!!!!

    Wie das da reingekommen ist??

    Das kann ich jetzt nicht mehr nachvollziehen. Angepasst und fertig. Meine Abfragen über HTML etc. hatten das noch vor wenigen Minuten auch richtig angezeigt.

    Damit ist die Sache erledigt.

    Danke für die Unterstützung.

    Gruß Jan