SafeFileDialoge und Datenbankerzeugung

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    SafeFileDialoge und Datenbankerzeugung

    Hallo,
    Ich bin neu im Gebiet der Programmierung und suche Hilfe. Ich will ein Programm schreiben, in welchen ich im ersten Schritt eine Datenbank erzeuge. Im zweiten Schritt soll sie dann gefüllt werden.
    Ich arbeite im ersten schritt mit einem SaveFileDialog und der funktioniert auch, erhalte aber die Meldung, dass keine Datenbank erzeugt wird.
    Der Quellcode (ist erst mal nur eine Demo, darum etwas kurz):

    Visual Basic-Quellcode

    1. Public Class Form1
    2. Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. SaveFileDialog1.ShowDialog()
    4. SaveFileDialog1.InitialDirectory = "C:\Users\"
    5. SaveFileDialog1.FileName = "Sammler"
    6. SaveFileDialog1.Filter = "Data Base File|*.db"
    7. SaveFileDialog1.Title = "Ort zum Speichern auswählen"
    8. My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, "", True)
    9. Static host As String = SaveFileDialog1.FileName
    10. Dim connect As New SQLite.SQLiteConnection()
    11. Dim abc = "Data Source=" & host & ";"
    12. connect.ConnectionString = abc
    13. connect.Open()
    14. connect.Close()
    15. connect.Open()
    16. Dim Comand = connect.CreateCommand
    17. Comand.CommandText = "CREATE TABLE user(id INTEGER PRIMARY KEY AUTOINCREMENT,name);
    18. INSERT INTO user (name)VALUES('Bud Powell');"
    19. Comand.ExecuteNonQuery()
    20. Comand.Dispose()
    21. connect.Close()
    22. End Sub
    23. Public Sub OPI(ByVal abc)
    24. Button2.PerformClick()
    25. Dim connect As New SQLite.SQLiteConnection()
    26. connect.ConnectionString = abc
    27. connect.Open()
    28. connect.Close()
    29. connect.Open()
    30. Dim Comand = connect.CreateCommand
    31. Comand.CommandText = "INSERT INTO user (name)VALUES('Ich undo');"
    32. Comand.ExecuteNonQuery()
    33. Comand.Dispose()
    34. connect.Close()
    35. End Sub
    36. End Class

    Fehlermeldung ist in Zeile 23, "System.Data.SQLite.SQLiteException: "file is not a database file is not a database" ".
    Bin für alle Hinweise, Vorschläge und Anmerkungen offen, da ich bis vor einigen Tagen davon gar keine Ahnung hatte und noch Neu bin.
    Moin,

    Static host As String = SaveFileDialog1.FileName
    ...
    Dim abc = "Data Source=" & host & ";"


    Das ist kein vollständiger ConnectionString. Ein ConnectionString für SQLite muss mindestens zusätzlich noch die Versionnummer beinhalten.

    Quellcode

    1. Data Source=c:\mydb.db;Version=3;
    .

    connect.Open()
    connect.Close()
    connect.Open()

    Wieso öffnest du mehrfach eine Connection, nur um sie direkt wieder zu schließen und erneut zu öffnen? Ich kenne SQLite nicht, aber das kann nicht im Sinne der Entwicklers sein.

    Kommen wir aber zum eigentlichen Problem:

    SaveFileDialog1.ShowDialog()
    SaveFileDialog1.InitialDirectory = "C:\Users\"
    SaveFileDialog1.FileName = "Sammler"
    SaveFileDialog1.Filter = "Data Base File|*.db"
    SaveFileDialog1.Title = "Ort zum Speichern auswählen"

    My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, "", True)


    Du erstellst im Prinzip eine leere Datei, setzt die Endung .db dahinter und erwartest, dass die Datei dann eine Datenbankdatei ist. Google erstmal danach, wie man eine SQLite-Datenbank erstellt. Die Fehlermeldung ist doch auch aussagekräftig. Die von dir erstellte Datei ist keine Datenbank, sondern nur eine leere Datei die du einfach plump .db-Datei nennst.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    Hallo,
    Danke für die Antwort. Da mit dem ConnectionString für SQLite wusste ich nicht, ich habe mit es ohne gemacht und es schien auch zu gehen. Auch mit dem Öffnen und schließen.
    Mein Hauptanliegen ist eigentlich, dass ich erst einen Platz angebe, wo die Datenbank gespeichert wird, sie an dem Ort erzeugt wird und im nächsten Schritt mit ihr gearbeitet wird.
    Bisher habe ich die Datenbank so angelegt

    VB.NET-Quellcode

    1. Dim myconnection As New SQLiteConnection("Data Source=d:\testdb.db3;")

    Ich suche nach einer Möglichkeit, dass ich den Speicherort beliebig verändern kann. möglichst mit der Art Eingabe wie mit SafeFileDialog, sprich mit so einem Fenster etc.
    Geht das?

    scherze3 schrieb:

    Mein Hauptanliegen ist eigentlich, dass ich erst einen Platz angebe, wo die Datenbank gespeichert wird, sie an dem Ort erzeugt wird ...
    Dann musst du die Datenbank auch erzeugen.
    connect.CreateFile(SaveFileDialog1.FileName)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --