Anzahl Datensätze bei einer SQLite-DB

  • VB.NET

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

    Anzahl Datensätze bei einer SQLite-DB

    Moin!

    muss jetzt einmal Daten aus einer SQLite abfrage und habe meine ersten Schritte mit youtube.com/watch?v=QUUYJUgFndQ gemacht.

    Daraus habe ich mir jetzt folgendes abgeleitet:

    VB.NET-Quellcode

    1. Private Function GetSingleValueAsString(ByVal SQL As String, ColumnName As String) As String
    2. If ColumnName.Length = 0 Then Return ""
    3. Try
    4. Dim cmd As SQLiteCommand = New SQLiteCommand(SQL, _conn)
    5. Dim reader As SQLiteDataReader = cmd.ExecuteReader
    6. While (reader.Read)
    7. WriteInfo(reader("Nummer") & " - " & reader("Bezeichnung"))
    8. End While
    9. Catch ex As System.Exception
    10. If IsNothing(_Log) Then
    11. _TryReport.Show("unerwarteter Fehler in EBL.Service > SQLiteTools > GetSingleValue", ex.ToString)
    12. Else
    13. With _Log
    14. .WriteAsError("unerwarteter Fehler in EBL.Service > SQLiteTools > GetSingleValue" & vbCrLf & ex.ToString)
    15. End With
    16. End If
    17. End Try
    18. End Function


    Ganz stimmen die Spaltennamen noch nicht - aber wie komme ich da an die Anzahl der ermittelten Datensätze ran. Es muss ja nicht immer einer sein.

    Bei

    VB.NET-Quellcode

    1. reader.Readreader.Read

    habe ich keinen entsprechenden Zugriff gefunden!

    Gruß Jan

    jan99 schrieb:

    aber wie komme ich da an die Anzahl der ermittelten Datensätze ran.
    w3schools.com/sql/sql_count_avg_sum.asp
    Oder mit:

    VB.NET-Quellcode

    1. Dim result = cmd.ExecuteNonQuery()
    z.B.:

    VB.NET-Quellcode

    1. Public Function DeleteRows() As Integer
    2. Dim result As Integer
    3. Using conn As New SQLiteConnection(connectionString)
    4. conn.Open()
    5. Using cmd As New SQLiteCommand(conn)
    6. cmd.CommandText = "DELETE FROM Tabelle WHERE ??? = ???"
    7. result = cmd.ExecuteNonQuery()
    8. End Using
    9. End Using
    10. Return result
    11. End Function

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

    Moin!

    erst einmal Danke - SQLiteConnection klingt auf den ersten Blick besser was den Zugriff betrifft.

    Aber ich kann das sicherlich nicht mit

    VB.NET-Quellcode

    1. Imports System.Data.SQLite


    nutzen, was ich einfach über die NuGet-Paketverwaltung eingebunden habe.

    Oder kann ich das auf vergleichbarem einfachen Weg einfach austauschen?

    Gruß Jan

    Murdoc schrieb:

    Moin,

    SQLiteConnection gehört zu System.Data.SQLite. Wenn du den importierst kannst du die Connection auch benutzen.
    ....


    Moin!

    das ist damit schon ausgetauscht.

    Kennst Du irgendwie eine Seite mit einem guten Codebeispiel - ich hatte mich ja bis jetzt an dem Video orientiert und fündig geworden bin nicht so wirklich bis jetzt.

    Gruß Jan
    Was man vielleicht dazu sagen sollte ist folgendes:
    System.Data.SQLite ist ein ADO.NET Provider. Dies bedeutet, dass sämtliche Klassen in diesem Namespace auf den Basisklassen des System.Data.Common Namespaces aufbauen Bspw. baut die SQLiteConnection auf der DbConnection auf, wie auch z.B. der MySql Provider (MySql.Data) die MySqlConnection hat, oder der SQL Server Provider (System.Data.SqlServer) die SqlConnection usw.

    Da du dich wohl kaum mit SQLite spezifischen sachen herumschlagen möchtest, kannst du i.d.R. sämtlichen Code, den du hier zum Thema Datenbankanbindung findest, sehr leicht auf SQLite übertragen.
    Moin!

    erstmal viel Dank - schaue ich mir an, wenn wieder im Office.

    Was anderes - für die Tabelldefinition und Dateneingabe habe ich mir DB Browser (?) installiert.

    Bisher habe ich kein Tool mit GUI gefunden um SQL einzugeben und dann die Daten angezeigt zu bekommen. Vielleicht kann der DB Browser das - dann habe ich dieses noch nicht gefunden.

    Kann mir einer einen Tipp geben, auch wenn die Frage nicht direkt zu VB.net passt?

    Jan

    jan99 schrieb:

    Bisher habe ich kein Tool mit GUI gefunden um SQL einzugeben und dann die Daten angezeigt zu bekommen.
    Ich habe dir ein Projekt mit Daten hochgeladen, wo du dich in SQL probieren kannst...
    Urheber: Doberenz/Gwenius aus dem Buch 'Datenbank-Programmierung mit VB2010' (Kapitel 3 beigelegte CD)
    Dateien
    Moin!

    nun verstehe ich gar nichts mehr.

    Zwischenzeitlich habe ich etwas mit dem Weg aus #2 versucht weiterzukommen - hier nochmal zur besseren Übersicht

    VB.NET-Quellcode

    1. Public Function DeleteRows() As Integer
    2. Dim result As Integer
    3. Using conn As New SQLiteConnection(connectionString)
    4. conn.Open()
    5. Using cmd As New SQLiteCommand(conn)
    6. cmd.CommandText = "DELETE FROM Tabelle WHERE ??? = ???"
    7. result = cmd.ExecuteNonQuery()
    8. End Using
    9. End Using
    10. Return result
    11. End Function


    und daraus ist bei mir geworden:

    VB.NET-Quellcode

    1. Public Function GetSingleValueAsString(ByVal SQL As String, ColumnName As String) As String
    2. Dim Result As String = ""
    3. ' ------ https://www.youtube.com/watch?v=QUUYJUgFndQ ------
    4. If ColumnName.Length = 0 Then Return ""
    5. Try
    6. Dim cmd As SQLiteCommand = New SQLiteCommand(SQL, _conn)
    7. Dim SqlReader As SQLiteDataReader = cmd.ExecuteReader
    8. Dim count As Integer
    9. count = cmd.ExecuteNonQuery
    10. If count = 1 Then
    11. Result = SqlReader(ColumnName)
    12. End If
    13. Catch ex As System.Exception
    14. If IsNothing(_Log) Then
    15. _TryReport.Show("unerwarteter Fehler in EBL.Service > SQLiteTools > GetSingleValue", ex.ToString)
    16. Else
    17. With _Log
    18. .WriteAsError("unerwarteter Fehler in EBL.Service > SQLiteTools > GetSingleValue" & vbCrLf & ex.ToString)
    19. End With
    20. End If
    21. End Try
    22. Return Result
    23. End Function


    In der Zeile mit

    VB.NET-Quellcode

    1. Result = SqlReader(ColumnName)


    bekomme ich folgende Meldung

    DataReader already active on this command


    Das verstehe ich nun gar nicht mehr. Habe ich da aus #2 etwas völlig falsch verstanden ... ?

    Vielleicht kann man mir das aus dem vorangegangen Beispiel hier nochmal versuche zu erläutern. Bei mir ist die Leitung manchmal etwas länger ... .-)

    Gruß Jan
    Diese Meldung besagt, dass du den SQLReader schon bedient hast...
    Ich denke, das mit dem Count kannst du auch beim Reader-Auslesen berücksichtigen...

    VB.NET-Quellcode

    1. Using cmd = New SQLiteCommand(SQL, _conn)
    2. Using dr = cmd.ExecuteReader()
    3. Dim Result = ""
    4. Dim _count = 0
    5. While dr.Read
    6. Result = dr.GetValue(ColumnName)
    7. _Count += 1
    8. If _count > 1 then
    9. Result = ""
    10. Exit While
    11. End If
    12. End While
    13. Return Result
    14. End Using
    15. End Using

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

    Moin!

    danke ! Also einmal verwenden, dann ist die Abfrage mit

    VB.NET-Quellcode

    1. count = cmd.ExecuteNonQuery


    "verbrannt"?!?!

    Hat es einen Grund das Du statt

    VB.NET-Quellcode

    1. Dim cmd As SQLiteCommand = New SQLiteCommand(SQL, _conn)


    jetzt

    Visual Basic-Quellcode

    1. ...cmd As OleDbCommand = New OleDbCommand(SQL, _conn)


    genommen hast?

    Gruß Jan
    Moin!

    Ihr hattet ja von der anderen Codierform gesprochen. Gestern Abend noch etwas bei Youtube gesucht und unter youtube.com/watch?v=30jrHdYagE0 ein Beispiel gefunden.

    Mein Code entsprechend angepasst ergibt nun:

    VB.NET-Quellcode

    1. Public Function GetSingleValueAsString(ByVal SQL As String, ColumnName As String, Optional ByVal Vorgabewert As String = "") As String
    2. Dim Result As String = ""
    3. ' ------ https://www.youtube.com/watch?v=30jrHdYagE0 ------
    4. If ColumnName.Length = 0 Then Return ""
    5. Try
    6. Dim cmd As SQLiteCommand = New SQLiteCommand(SQL, _conn)
    7. Dim da As New SQLiteDataAdapter(cmd)
    8. Dim dt As New DataTable
    9. da.Fill(dt)
    10. If dt.Rows.Count = 1 Then
    11. Result = dt.Rows(0).Item(ColumnName)
    12. Else
    13. Result = Vorgabewert
    14. End If
    15. Catch ex As System.Exception
    16. If IsNothing(_Log) Then
    17. _TryReport.Show("unerwarteter Fehler in EBL.Service > SQLiteTools > GetSingleValue", ex.ToString)
    18. Else
    19. With _Log
    20. .WriteAsError("unerwarteter Fehler in EBL.Service > SQLiteTools > GetSingleValue" & vbCrLf & ex.ToString)
    21. End With
    22. End If
    23. End Try
    24. Return Result
    25. End Function


    Gruß Jan