Das Problem scheint zu sein, dass Sie verschiedene Pfade in CreateFile
und Ihre Verbindungszeichenfolge verwenden.
Wenn Sie sich Ihren Code unten ansehen, werden Sie feststellen, dass Sie in einem Fall einen vollständigen Pfad zum Erstellen der Datei verwenden (databaseBasePath
), während Sie im anderen Fall nur den Namen der Datenbankdatei in der Verbindungszeichenfolge verwenden (dbName
)). Ohne einen absoluten Pfad, kann dies ein anderer Ordner sein!
string dataBasePath = startupPath + "\\DB\\" + dbName;
SQLiteConnection.CreateFile(dataBasePath);
SQLiteConnection dbConnString;
dbConnString = new SQLiteConnection("Data Source =" + dbName + ";Version=3;");
Es scheint wie Open
dann die Datei erstellt, wenn sie es nicht finden können.
Ein Wort auf den Pfaden:
- Sie sind nicht die
Program Files
Ordner schreiben erlaubt, so die aktuellen Ordner für die Datenbank-Datei ist wirklich eine schlechte Idee.
- Die Verwendung von
Environment.CurrentDirectory
ist auch eine schlechte Idee. Je nachdem, wie Sie Ihre Anwendung starten, ist dies möglicherweise der Ordner, den Sie denken, oder nicht (siehe meine Kommentare zu den anderen Antworten und this).
- Gehen Sie niemals davon aus, dass
\
eigentlich der Pfadtrenner ist. Verwenden Sie stattdessen Path.Combine
.
Ich schlage vor, dass Sie Environment.GetFolderPath
verwenden, um einen Standort zu erhalten, die von allen Benutzern gemeinsam genutzt werden, um die aktuellen Benutzer (wenn die Datenbank-Inhalte geteilt werden sollen) oder privat (wenn alle Benutzer ihre eigene Datenbank haben sollen) und erstellen Sie die Datenbank dort:
string baseFolder = Environment.GetFolderPath(<wherever it should be>);
string dataBasePath = Path.Combine(baseFolder, "DB", dbName);
SQLiteConnection.CreateFile(dataBasePath);
SQLiteConnection dbConnString = new SQLiteConnection(String.Format("Data Source = {0};Version=3;", dataBasePath);
es scheint, dass dieser Aufruf dbConnString.Open() eine sQLite-Datei in exe-Verzeichnis erzeugt wird; – phoenix