Ich probiere mich gerade in ASP.NET und um nicht gleich einen SQL-Server aufsetzen zu müssen, nutze ich SQLite. Die Abfragen sind ähnlich und zum Rumspielen reicht das dicke hin. Zudem habe ich schon ein paar Erfahrungen mit einem anderen Tool gesammelt. Nun hatte ich folgendes Phänomen, ganz am Anfang hatte ich die Datenbank erstellt mit irgendwelchen Dummyeinträgen und ein bischen mit den Ajaxelementen von Visual Studio rumgespielt.
Das hat auch gut geklappt, das auslesen der Daten lief im Hintergrund per SQLiteConnection(). Dann habe ich mir ein reines HTML Formular gebastelt und wollte hier eine Art Login ausprobieren. Auf einmal kam jedes mal die Fehlermeldung, dass die Datenbank „Users“ nicht gefunden wurde (Users war die von mir erstellte).
System.Data.SQLite.SQLiteException: SQLite error no such table: Users bei System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain) bei System.Data.SQLite.SQLiteCommand.BuildNextCommand() bei System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index) bei System.Data.SQLite.SQLiteDataReader.NextResult() bei System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave) bei System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior) bei System.Data.SQLite.SQLiteCommand.ExecuteReader() bei ASPGuestbook.LoginForm.checkLogin() in ...\LoginForm.aspx.cs:Zeile 57.
Unter Visual Studio konnte ich die SQLite Datenbank ohne Probleme bearbeiten. Die Datei war auch im selben Verzeichnis. Ich hatte mir auch per AppDomain.CurrentDomain.BaseDirectory das Verzeichnis ausgeben lassen. Hat auch alles gepasst.
Mein Befehl zum Öffnen lautete so:
SQLiteConnection sqlCon = new SQLiteConnection("Data Source=datenbank.db3;Password=12345;"); sqlCon.Open();
Natürlich schön im try / catch Block verpackt, es kam aber keine Fehlermeldung. Hat einen Moment gedauert bis ich dahinter kam. Und zwar hat die SQLite Erweiterung die ich nutze die dumme Angewohnheit, wenn Data Source nicht existiert, dass er eine leere Datenbank anlegt. In dieser leeren Datenbank gibt es natürlich nicht die Tabellen und folglich der Fehler. Angelegt hat er diese leeren Datenbanken übrigends unter
C:\Programme\Microsoft Visual Studio 9.0\Common7\IDE
Darauf muss man erstmal kommen..
So funktioniert es dann, ob es die optimale Lösung ist, bezweifel ich.
SQLiteConnection sqlCon = new SQLiteConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "bin\\datenbank.db3;Password=12345;"); sqlCon.Open();
Das Problem lässt sich sicherlich auch auf andere Sprachen adaptieren. Bei einem richtigen SQL Server fällt das ja sowieso weg, aber nervig wars trotzdem!