Datenbank ist sqlite
Welcher Datenbankprovider ist für sqlite zu empfehlen?
Ich nutze c# express 2010.
Wird dieser hier noch weiterentwickelt?
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
Im Erweiterungsmanager habe ich den dotconnect for sqlite gefunden, was haltet ihr von dem?
danke.
Laufen die entweder unter 32bit oder 64bit. Oder geht beides?
Also kann die Anwendung auf 32 und 64bit systemen laufen oder muss das dann bei jedem system angepasst werden?
du kannst dir die x86 oder x64 dlls laden. ich kann heute abend (gegen 19 uhr) mal etwas code posten um zu zeigen wie man zur laufzeit die richige dll laden kann.
wenn du solange nicht warten kannst dann nimm die x86 version und stell dein Build von Any CPU auf x86 um.
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"
super vielen Dank für deine Hilfe.
Bin sehr auf deinen code gespannt. werde das andere auch mal testen.
Ich sehe gerade das die expressversion aus dem x86 Ordner gestartet wird, von daher kommt ja eigentlich eh nur die x86 Variante in Frage oder?
Dein Code würde mich aber trotzdem interessieren.
Hallo,
ich kann heute abend (gegen 19 uhr) mal etwas code posten um zu zeigen wie man zur laufzeit die richige dll laden kann
hier der Code
Felder:
private Assembly _assembly;
private dynamic _ConnectionInstance;
Im Konstruktor:
try
{
var tmpPath = Path.Combine(
Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments ), "Database", "MySqliteDB.s3db" );
if ( !File.Exists( tmpPath ) )
{
var tmpPathSub = tmpPath.Substring( 0, tmpPath.LastIndexOf( '\\' ) );
if ( !Directory.Exists( tmpPathSub ) )
{
Directory.CreateDirectory( tmpPathSub );
}
//Hier müsste man eine neue Datei erstellen, aber in dieser DB sind schon Testdaten
File.Copy( Path.Combine( "Database", "MySqliteDB.s3db" ), tmpPath );
}
_connString = "Data Source=" + tmpPath + ";Version=3;";
_assembly = Assembly.LoadFrom( IntPtr.Size == 4 ? "libs/x86/System.Data.SQLite.dll" : "libs/x64/System.Data.SQLite.dll" );
CreateConnectionInstance();
}
catch
{
throw;
}
private void CreateConnectionInstance()
{
_ConnectionInstance = _assembly.CreateInstance( "System.Data.SQLite.SQLiteConnection" );
_ConnectionInstance.ConnectionString = _connString;
}
Noch etwas Info:
Innerhalb des Projektes ist ein Ordner (libs) mit 2 Unterordnern (x86/x64) und die Dlls in den entsprechenden Versionen. Dazu noch die Dll SQLite.Interop.dll (nicht in den Unterordnern). Alle Dlls haben als Eigenschaft Copy Always gesetzt (Copy to Output Directory).
ich arbeite hier noch mit einer älteren sqlite Version (v3), kann also sein dass man die Interop dll nicht mehr in den neueren Versionen braucht.
falls fragen bestehen, kann ich die wohl erst morgen beantworten
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"
Ich bin jetzt kurz vor dem Verzweifeln.
Ich habe eine Datenbank mit sqliteadmin erstellt. Sie liegt auf c:\ und heißt test.s3db
Hier ist mein Code, ich bekomme keine Fehlermeldung aber der scheint keine Verbindung aufzubauen, waran kann das liegen? ISt der Connectstring ok?
try
{
string query = "Select * From Rollen";
SQLiteConnection con = new SQLiteConnection("Data Source =c:\\test.s3db;Version=3;");
con.Open();
SQLiteDataAdapter da = new SQLiteDataAdapter();
da.SelectCommand = new SQLiteCommand(query, con);
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
dataGridView1.DataSource = dt;
}
catch
{
textBox1.Text = "geht nicht";
}
ich würde mal vorschlagen das Leerzeichen nach "Data Source" zu entfernen. (was eigt egal sein dürfte)
ansonsten stelle sicher dass deine Datenbank auch die Version 3 ist.
lade dir hier mal das Tool SmartDB runter (oder ein anderes was für dich ansprechender ist) und versuch dich mit dem Programm zur DB zu verbinden.
Falls nötig konvertiere deine DB in die Version 3.
und noch ein Tipp:
im Catch-Block definiere eine Exception variable und gebe die message in der TextBox aus
also so
catch (Exception ex)
{
TextBox1.Text = ex.Message;
}
EDIT: vergiss das mit dem Tool, hatte überlesen dass du schon eins verwendest
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"
Hallo,
ich habe jetzt mit diversen tools (sqlite2009, navicat, sqliteadmin)sqlite datenbanken erstellt, und mit keiner kann ich mich per c# verbinden, entweder sehe ich den Wald vor Bäumen nicht, ich finde auf jeden Fall den Fehler nicht.
Könnte es am Connectstring liegen?
Sie liegt auf c:\ und heißt test.s3db
Nur mal ins Blaue geraten, C:\ (bzw. die Systemplatte) ist ein geschütztes Verzeichnis.
Verschieb die Datei mal in einen Unterordner.
Allerdings müsste auch eine IOException auftreten...
Ich habe den Pfad jetzt mal auf c:\test geändert, leider kein Erfolg.
Ich verstehe das nicht, dem Projekt muss man ja nur die sqlite.dll zuweisen, oder muss da noch was passieren?
Noch etwas Info:
Innerhalb des Projektes ist ein Ordner (libs) mit 2 Unterordnern (x86/x64) und die Dlls in den entsprechenden Versionen. Dazu noch die Dll SQLite.Interop.dll (nicht in den Unterordnern). Alle Dlls haben als Eigenschaft Copy Always gesetzt (Copy to Output Directory).
nun, die SQLite.Interop.dll muss im Verzeichnis deiner Exe vorhanden sein und die System.Data.SQLite.dll muss referenziert werden.
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"