Lokaler Pfad bei SQLite Datenbank und ASP.NET

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!

Günstiges C# Buch

Das Buch „C# 2008 – Profihandbuch und Referenz“ gibt es mit Gutschein für gerade mal rund 10€ + VSK.
Mehr dazu gibt es hier!

Leider habe ich bei Amazon etc. keine Referenzen zu dem Buch gefunden, aber ich denke bei dem Preis kann man nicht viel falsch machen.
Man kann übrigends nur ein einziges bestellen, schade eigentlich!

via: Jan Welker

3 Schichten Modell

Ich versuche mich aktuell, ein C# Projekt schön nach dem 3-Schichten-Modell aufzubauen. Ich orientiere mich dazu an einem HowTo von Robert Mühsig (netter Blog btw.).

Klappt alles schon ganz gut, es ist etwas aufwendiger mit dem programmieren, wie ich finde, da man sich über mehr Sachen gedanken machen muss.
Aber es hat zum Beispiel den Vorteil, dass alles schön sauber getrennt ist. Ich könnte theoretisch statt einer SQLite Datenbank als Datenquelle eine XML-Datei nutzen, nur indem ich eine anderes Objekt instanziere. Ein ordentliches Interface vorrausgesetzt, habe ich nirgendwo Probleme, dieses auch anzusprechen. Natürlich könnte man dies auch ohne das 3-Schichten-Modell machen, allerdings sind hier die Bereiche schön getrennt. So hab ich wirklich nur eine Stelle, die dafür zuständig ist, die Daten aus der Datenquelle auszulesen und wegzuschreiben und muss an anderer Stelle absolut nichts anpassen.

Wie gesagt, der Aufwand ist etwas größer und langsam wird mir zum Beispiel klar, wozu man schöne Klassendiagramme brauchen kann 😉 War der Berufsschulquatsch doch nicht ganz umsonst. Ich könnte mich an diese Programmierweise echt gewöhnen!

Ach ja, bei dem Projekt geht es um eine DVD-Archiv-Software mit „Verleih“-Modull. Kann es privat selbst ganz gut gebrauchen. Als mögliche Datenquellen soll es neben (aktuell) SQLite auch XML sowie MSSQL geben (evtl. auch MySQL). Desweiteren überlege ich später als weitere Übung, eine ASP.NET Weboberfläche zu erstellen, so dass man diese Verwaltung auch Online nutzen kann. Aber erstmal eins nach dem anderen 🙂