Datareader - unterschiedliche Ergebnisse

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

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von simpelSoft.

    Datareader - unterschiedliche Ergebnisse

    Hallo

    Ich versuche in Visual Basic 2010 Express eine DBF-Datenbank auszulesen, wobei gegebenenfalls mehrere Abfragen hintereinander erforderlich sind.
    Bei dem beigeschlossenen Beispiel verstehe ich nicht, warum bei dem ersten Aufruf 10 und bei dem zweiten Aufruf null Treffer gefunden werden.
    Vielen Dank für Eure Hilfe

    Sub main()
    Dim db_sql As String

    db_sql = "select * from ADRESSEN where NAME like 'x%'"
    Call db_abfrage(db_sql)

    Call db_abfrage(db_sql)
    End Sub

    Private Sub db_abfrage(ByVal db_sql As String)
    Dim db_constr As String = "Provider = Microsoft.jet.oledb.4.0; data source = c:\;Extended Properties=dBase IV"
    Dim db_table As New DataTable()

    Using db_conn As New System.Data.OleDb.OleDbConnection(db_constr)
    db_conn.Open()

    Using db_cmd As New OleDb.OleDbCommand(db_sql, db_conn)
    Using db_DataReader As OleDb.OleDbDataReader = db_cmd.ExecuteReader()
    db_table.Load(db_DataReader)
    db_DataReader.Close()
    End Using
    End Using
    db_conn.Close()
    End Using

    MsgBox(db_table.Rows.Count)
    End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „stauder“ ()

    Hallo

    Bei dem Einfügen schienen die Zeileneinschübe noch da zu sein. Bin ein ungeübter Forenschreiber. Ein neuer Versuch mit manuellem EInschub:

    Quellcode

    1. Sub main()
    2. Dim db_sql As String
    3. db_sql = "select * from ADRESSEN where NAME like 'x%'"
    4. db_abfrage(db_sql)
    5. db_abfrage(db_sql)
    6. End Sub
    7. Private Sub db_abfrage(ByVal db_sql As String)
    8. Dim db_constr As String = "Provider = Microsoft.jet.oledb.4.0; data source = c:\;Extended Properties=dBase IV"
    9. Dim db_table As New DataTable()
    10. Using db_conn As New System.Data.OleDb.OleDbConnection(db_constr)
    11. db_conn.Open()
    12. Using db_cmd As New OleDb.OleDbCommand(db_sql, db_conn)
    13. Using db_DataReader As OleDb.OleDbDataReader = db_cmd.ExecuteReader()
    14. db_table.Load(db_DataReader)
    15. db_DataReader.Close()
    16. End Using
    17. End Using
    18. db_conn.Close()
    19. End Using
    20. MsgBox(db_table.Rows.Count)
    21. End Sub
    Nächster Versuch:

    VB.NET-Quellcode

    1. Sub main()
    2. Dim db_sql As String
    3. db_sql = "select * from ADRESSEN where NAME like 'x%'"
    4. db_abfrage(db_sql)
    5. db_abfrage(db_sql)
    6. End Sub
    7. Private Sub db_abfrage(ByVal db_sql As String)
    8. Dim db_constr As String = "Provider = Microsoft.jet.oledb.4.0; data source = c:\;Extended Properties=dBase IV"
    9. Dim db_table As New DataTable()
    10. Using db_conn As New System.Data.OleDb.OleDbConnection(db_constr)
    11. db_conn.Open()
    12. Using db_cmd As New OleDb.OleDbCommand(db_sql, db_conn)
    13. Using db_DataReader As OleDb.OleDbDataReader = db_cmd.ExecuteReader()
    14. db_table.Load(db_DataReader)
    15. db_DataReader.Close()
    16. End Using
    17. End Using
    18. db_conn.Close()
    19. End Using
    20. MsgBox(db_table.Rows.Count)
    21. End Sub

    stauder schrieb:

    Kann es sich um ein Problem mit der DBF-Datei und nicht der Programmlogik handeln?


    Möglich wäre es, denn zumindest bei der Query sehe ich keinen Grund, das nur 1x geliefert wird.
    Was den Rest des Codes angeht - mit OleDb habe ich keine Erfahrung.
    Du könntest die DBF übrigens auch problemlos in eine modernere Datenbank wandeln (z.B. MySQL oder SQlite) und damit arbeiten, falls es Dein Projekt zulässt.

    Nachtrag: ich habe Deinen Code kurz überflogen - alles hast Du uns aber nicht gezeigt? Was machst Du denn mit der gefüllten DataTable? Ich sehe da nichts.