SQLite Verbindung zu Datenbank herstellen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von BitBrösel.

    SQLite Verbindung zu Datenbank herstellen

    Hallo,

    ich habe eine SQLite-DB mit dem sqliteadmin erstellt und wollte über VB.net Daten einspielen.
    Zuerst hatte ich immer den Fehler "SQL Logic error - no such table: Testdaten.s3db". Irgendwann habe ich herausgefunden, dass dieses Problem an der Pfadangabe absolut/relativ liegt.
    Nun habe ich den Pfad zur Datenbank angegeben und erhalte beim INSERT-Befehl die Meldung "SQLite error (1): unrecognized token: ":" in "SELECT * FROM E:\VB.NET\2206_DB-Test\bin\x86\Testdaten.s3db WHERE ID = '' OR Vorname = '' OR Zeitstempel = '';".

    Wie muss ich vorgehen, damit er sich nicht an der Pfadangabe stört?

    VB.NET-Quellcode

    1. Public DB_Name As String = Application.StartupPath & "\Testdaten.s3db"
    2. Public Sub connect_db()
    3. sqlite_conn = New SQLiteConnection("Data Source='" & DB_Name & "';Version=3;New=True;Compress=True;")
    4. sqlite_conn.Open()
    5. sqlite_cmd = sqlite_conn.CreateCommand()
    6. End Sub
    7. Public Sub Suche_in_DB(ByVal Suchstring As String, dgv As DataGridView)
    8. Dim DB_in_DGV As New DataTable
    9. sqlite_conn = New SQLiteConnection("Data Source=" & DB_Name & ";Version=3;New=True;Compress=True;")
    10. sqlite_cmd = sqlite_conn.CreateCommand
    11. sqlite_cmd.CommandText = "SELECT * FROM " & DB_Name & " WHERE ID = '" & Suchstring & "' OR Vorname = '" & Suchstring & "' OR Zeitstempel = '" & Suchstring & "';"
    12. sqladapt.SelectCommand = sqlite_cmd
    13. Try
    14. sqladapt.Fill(DB_in_DGV)
    15. Catch ex As Exception
    16. MessageBox.Show("Es wurde ein Fehler festgestellt:" & vbCrLf & vbCrLf & ex.Message, "SQL-Test", MessageBoxButtons.OK, MessageBoxIcon.Error)
    17. End Try
    18. dgv.DataSource = DB_in_DGV
    19. End Sub
    Ja, das stimmt natürlich. In diesem Fall ist die Pfadangabe ein Versuch gewesen.
    Meine DB hat den Namen Testdaten und die erste Tabelle darin heißt DB1.
    Egal, wie ich verbinde, ich erhalte immer eine Fehlermeldung.

    Folgende Sachen hatte ich getestet, auch in Anführungsstrichen etc:

    SQL-Abfrage

    1. "SELECT * FROM Testdaten.s3db WHERE ID = '" & Suchstring & "' OR Vorname = '" & Suchstring & "' OR Zeitstempel = '" & Suchstring & "';"
    2. "SELECT * FROM Testdaten WHERE ID = '" & Suchstring & "' OR Vorname = '" & Suchstring & "' OR Zeitstempel = '" & Suchstring & "';"
    3. "SELECT * FROM Testdaten.DB1 WHERE ID = '" & Suchstring & "' OR Vorname = '" & Suchstring & "' OR Zeitstempel = '" & Suchstring & "';"
    4. "SELECT * FROM DB1 WHERE ID = '" & Suchstring & "' OR Vorname = '" & Suchstring & "' OR Zeitstempel = '" & Suchstring & "';"


    Da das alles nicht funktionierte habe ich die Pfadeingabe gemacht. Für das Verbinden ok, für den SQL-Befehl muss ich natürlich eine neue Variable nutzen.

    "SQL Logic error - no such table: Testdaten.s3db"
    "SQL Logic error - no such table: Testdaten"
    "SQL Logic error - no such table: Testdaten.DB1"
    "SQL Logic error - no such table: DB1"
    Wollte da grad mal was testen bzgl. SqLite unter VB.NET. Was importest du denn, damit du das nutzen kannst? Hast du ein Nuget-Paket installiert?
    Ich kann gar keine SqLiteConnection erstellen...
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Aber selbst auf 'False' änderte sich nichts. Die DB wurde bis dato auch nicht überschrieben oder neu angelegt.

    Ich habe es jetzt das nochmalige connecten geändert und es ging?

    VB.NET-Quellcode

    1. Public DB_Pfad As String = Application.StartupPath & "\Testdaten.s3db"
    2. Public DB_Name As String = "DB1"
    3. Public Sub connect_db()
    4. sqlite_conn = New SQLiteConnection("Data Source='" & DB_Pfad & "';Version=3;New=True;Compress=True;")
    5. sqlite_conn.Open()
    6. sqlite_cmd = sqlite_conn.CreateCommand()
    7. End Sub
    8. Public Sub Suche_in_DB(ByVal Suchstring As String, dgv As DataGridView)
    9. Dim DB_in_DGV As New DataTable
    10. connect_db()
    11. sqlite_cmd.CommandText = "SELECT * FROM '" & DB_Name & "' WHERE ID = '" & Suchstring & "' OR Vorname = '" & Suchstring & "' OR Zeitstempel = '" & Suchstring & "';"
    12. sqladapt.SelectCommand = sqlite_cmd
    13. Try
    14. sqladapt.Fill(DB_in_DGV)
    15. Catch ex As Exception
    16. MessageBox.Show("Es wurde ein Fehler festgestellt:" & vbCrLf & vbCrLf & ex.Message, "SQL-Test", MessageBoxButtons.OK, MessageBoxIcon.Error)
    17. End Try
    18. dgv.DataSource = DB_in_DGV
    19. End Sub


    Also ich hab's grad in nem leeren Testprojekt getestet und hat auf Anhieb funktioniert. Weiß nicht, was du da veranstaltet hast:

    VB.NET-Quellcode

    1. Imports System.Data.SQLite
    2. Public Class Form1
    3. Private Sub frm_Load(Sender As Object, e As EventArgs) Handles Me.Load
    4. Dim dbFile = "..\..\..\sqlite.db"
    5. Dim scon = $"Data Source={dbFile};Version=3;"
    6. Dim connection = New SQLiteConnection(scon)
    7. Try
    8. connection.Open()
    9. Catch ex As Exception
    10. MessageBox.Show(ex.Message)
    11. End Try
    12. Dim dt = New DataTable
    13. Dim da = New SQLiteDataAdapter
    14. Dim cmd = connection.CreateCommand
    15. Dim cmdText = "SELECT * FROM 'Abteilung'"
    16. cmd.CommandText = cmdText
    17. da.SelectCommand = cmd
    18. da.Fill(dt)
    19. dgv.DataSource = dt
    20. End Sub
    21. End Class


    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Bei mir geht es auch, falsche DB geladen? Hast du mehrere DBs mit dem selben Namen im Projekt und die falsche inspiziert?

    VB.NET-Quellcode

    1. Dim conn As New SQLiteConnection("Data Source='test.db';Version=3;New=True;Compress=True;")
    2. conn.Open()
    3. If conn.State() = ConnectionState.Open Then
    4. Dim command As SQLiteCommand = conn.CreateCommand()
    5. command.CommandText = "SELECT * FROM 'table1' WHERE name = 'test1';"
    6. Dim res As SQLiteDataReader = command.ExecuteReader
    7. While (res.Read())
    8. Debug.WriteLine(res.GetString(1))
    9. End While
    10. End If