Laden...

Welcher Datenbankprovider für sqlite

Erstellt von dott vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.988 Views
D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren
Welcher Datenbankprovider für sqlite

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?

175 Beiträge seit 2010
vor 10 Jahren

Wird dieser hier noch weiterentwickelt?

>

Na logisch..... Vor allem seit dem das Ding offiziell bei sqlite.org gehostet und gewartet wird....

Bye,
Knick

Debuggers don't remove Bugs, they only show them in Slow-Motion.

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

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?

P
660 Beiträge seit 2008
vor 10 Jahren

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"

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

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.

P
660 Beiträge seit 2008
vor 10 Jahren

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"

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

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";
            }

P
660 Beiträge seit 2008
vor 10 Jahren

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"

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

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?

M
334 Beiträge seit 2007
vor 10 Jahren

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...

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

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?

P
660 Beiträge seit 2008
vor 10 Jahren

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"

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

Oh mein Gott, das war es. vielen Dank
Jetzt geht es.