IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

SQLite et .Net


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Points : 234
    Points
    234
    Par défaut SQLite et .Net
    salut a tous je voudrais utilise SQLite dans une application .Net , j'ai voulue au début utiliser sql.net mais vue les problèmes de thread que pose cette version j'ai décidé d'utiliser DbEntry.Net http://www.codeplex.com/dbentry qui semble ne pas présenter ce problème ( si quelqu'un a réussie a utiliser sqlite.net avec des threads sans tout faire peter je suis preneur ).

    j'ai donc créer une fontion pour ajouter des donées a la base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    using System;
    using System.Collections;
    using System.Text;
    using System.IO;
    using System.Xml.XPath;
    using System.Data;
    using org.hanzify.llf.Data;
    using org.hanzify.llf.util;
    using org.hanzify.llf.Data.Dialect;
    using org.hanzify.llf.Data.SqlEntry;
    using org.hanzify.llf.Data.Common;
     
    namespace teste_berkeley
    {
        class Program
        {
            static void Main(string[] args)
            {
                SQL Sql = new SQL();
                Sql.SQLadd(1,"d:\teddy.txt");
     
            }
        }
     
        public class SQL
        {
           #region 'AddData'
     
            public void SQLadd(int id, string ntfs)
            {
                try
                {
                   // Using transaction
                   using (DataTransaction dt = new DataTransaction())
                   {
                       dt.ExecuteNonQuery(new SqlStatement("Insert Into [Dictionnary]([id],[ntfs]) Values('" + id + "','" + ntfs + "')"));
                       dt.Commit();
                   }
                }
                catch (DBConcurrencyException)
                {
                    Console.WriteLine("Fatal error ConcurrencyException -- function SQLadd");
                }
                catch (Exception e)
                {
                    Console.WriteLine("Generic exeption -- function SQLadd " + e);
                }
            }
     
            #endregion
        }
    }
    Mais sa plante dans l'un des exemples fournit avec la lib le code est le meme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
     
    		private void button2_Click(object sender, System.EventArgs e)
    		{
    			string[] s = new string[]
    				{
    					"Insert Into [SampleData] ([Name],[Role],[JoinDate],[Enabled]) Values ('angel',1,'2004-2-27 15:10:21',true)",
    					"Insert Into [SampleData] ([Name],[Role],[JoinDate],[Enabled]) Values ('demon',2,'2005-10-20 9:22:10',false)"
    				};
    			using ( DataTransaction dt = new DataTransaction() )
    			{
                    dt.ExecuteNonQuery(new SqlStatement(s[0]));
                    dt.ExecuteNonQuery(new SqlStatement(s[1]));
     
    				if ( MessageBox.Show("Do you want commit this transaction ?", "llf.hanzify.org", MessageBoxButtons.OKCancel) == DialogResult.OK )
    				{
    					dt.Commit();
    				}
    			}
    			MessageBox.Show("OK");
    		}

    J'ai donc pensé que j'avais une erreur au niveau de mon fichier App.config mais après vérification tout vas bien .

    Je m'arrache les cheveux sur SQLite ,sinon j'ai pensé utiliser la lib C++ originale mais il faut faire un wrapper pour .Net et je n'ai jamais fait sa et en plus j'aime pas C++ .

    J'ai mis joint a ce post le log de mon applie

    Merci de votre aide
    Fichiers attachés Fichiers attachés
    Everybody have in their the potential to be their own god : Marilyn Manson

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Impossible de charger le fichier ou l'assembly 'System.Data.SQLite, Version=1.0.36.1, Culture=neutral, PublicKeyToken=db937bc2d44ff139'
    Essaye de rajouter cette référence à ton projet

  3. #3
    Membre du Club Avatar de bluecurve
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 68
    Points : 43
    Points
    43
    Par défaut
    A une époque j'avais utilisé SQLite.NET ( il y as deux lib ayant le meme nom )

    http://www.phpguru.org/downloads/csharp/SQLite.NET/

    Il suffit d'ajouter la reference et de faire un using HLib; et rulez un exemple est fournit il est simple et préçis.

    par contre c'etait en .Net 1.x je ne sais pas par quoi a été remplacé HLib en 2.x car je vient de tester sa ne fonctionne pas

    voici le sample fournit avec la lib

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    using System;
    using HLib;
    using System.Collections;
     
    namespace SQLite.NET
    {
    	/// <summary>
    	/// Summary description for Class1.
    	/// </summary>
    	class SQLiteTest
    	{
    		/// <summary>
    		/// The main entry point for the application.
    		/// </summary>
    		static void Main()
    		{
    			SQLiteClient db;
    			SQLiteResultSet results;
     
    			Console.WriteLine("Basic test app for SQLite.NET. Enter a single line sql query and it will be run against the database.\r\n");
     
    			Console.WriteLine("Opening database 'test.db'...\r\n");
     
    			try {
    				// Open database
    				db = new SQLiteClient("test.db");
     
    			} catch (SQLiteException e) {
    				Console.WriteLine("Fatal error: {0}", e.Message);
    				Console.ReadLine();
    				return;
    			}
     
    			Console.WriteLine("Available tables:");
     
    			ArrayList tables = db.GetColumn("SELECT name FROM sqlite_master WHERE type = 'table'");
     
    			foreach (string tableName in tables) {
    				Console.WriteLine("\t" + tableName);
    			}
     
    			// Main loop
    			while (true) {
    				Console.Write("SQL> ");
    				string input = Console.ReadLine();
     
    				if (input == null || input.Trim() == "") {
    					continue;
    				}
     
    				if (input == ".quit") {
    					return;
    				}
     
    				try {
    					results = db.Execute(input);
     
    					ConsoleTable table = new ConsoleTable();
    					table.SetHeaders(results.ColumnNames);
     
    					// Loop through the results and display them
    					foreach (ArrayList arr in results.Rows) {
    						table.AppendRow(arr);
    					}
     
    					while (results.IsMoreData) {
    						Hashtable foo = results.GetRowHash();
    						foo.GetType();
    					}
     
    					Console.WriteLine(table.ToString());
     
    				} catch (SQLiteException e) {
    					Console.WriteLine(e.Message);
    				}
    			}
    		}
    	}
    }

    Comme tu peut voir l'utilisation de la lib est très simple , il ne te reste plus qu'a trouver comment la faire marcher en .net 2.x

  4. #4
    Membre du Club Avatar de bluecurve
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 68
    Points : 43
    Points
    43
    Par défaut
    En fait l'utilsation de HLib est obsolète en .Net 2.x, de plus j'ai oublier la moitier du code c'est pour cela que sa ne fonctionnais pas , en plus la lib que je t'ais indiqué est pour SQLite 1.x j'ai fait quelques changement de mon coté (pour utiliser la 3.x ) mais je bute sur un problème pour ouvrir une base 3.x il faut passer le nom de la base et le handler de base

    Comment importer un type C ? en l'occurence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct sqlite3 sqlite3;
    ensuite dans le code C# il suffit de faire sqlite3 db; de passer les argument a la fonctions et hop SqLite 3 rulez

    le code C qui montre qu'il faut importer le type sqlite3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
     
    #include <stdio.h>
    #include <sqlite3.h>
     
    static int callback(void *NotUsed, int argc, char **argv, char **azColName){
      int i;
      for(i=0; i<argc; i++){
        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
      }
      printf("\n");
      return 0;
    }
     
    int main(int argc, char **argv){
      sqlite3 *db;
      char *zErrMsg = 0;
      int rc;
     
      if( argc!=3 ){
        fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
        exit(1);
      }
      rc = sqlite3_open(argv[1], &db);
      if( rc ){
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        exit(1);
      }
      rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
      if( rc!=SQLITE_OK ){
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
      }
      sqlite3_close(db);
      return 0;
    }

    la structure a importer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    struct sqlite3 {
      int nDb;                      /* Number of backends currently in use */
      Db *aDb;                      /* All backends */
      int flags;                    /* Miscellanous flags. See below */
      int errCode;                  /* Most recent error code (SQLITE_*) */
      int errMask;                  /* & result codes with this before returning */
      u8 autoCommit;                /* The auto-commit flag. */
      u8 temp_store;                /* 1: file 2: memory 0: default */
      int nTable;                   /* Number of tables in the database */
      CollSeq *pDfltColl;           /* The default collating sequence (BINARY) */
      i64 lastRowid;                /* ROWID of most recent insert (see above) */
      i64 priorNewRowid;            /* Last randomly generated ROWID */
      int magic;                    /* Magic number for detect library misuse */
      int nChange;                  /* Value returned by sqlite3_changes() */
      int nTotalChange;             /* Value returned by sqlite3_total_changes() */
      struct sqlite3InitInfo {      /* Information used during initialization */
        int iDb;                    /* When back is being initialized */
        int newTnum;                /* Rootpage of table being initialized */
        u8 busy;                    /* TRUE if currently initializing */
      } init;
      int nExtension;               /* Number of loaded extensions */
      void **aExtension;            /* Array of shared libraray handles */
      struct Vdbe *pVdbe;           /* List of active virtual machines */
      int activeVdbeCnt;            /* Number of vdbes currently executing */
      void (*xTrace)(void*,const char*);        /* Trace function */
      void *pTraceArg;                          /* Argument to the trace function */
      void (*xProfile)(void*,const char*,u64);  /* Profiling function */
      void *pProfileArg;                        /* Argument to profile function */
      void *pCommitArg;                 /* Argument to xCommitCallback() */   
      int (*xCommitCallback)(void*);    /* Invoked at every commit. */
      void *pRollbackArg;               /* Argument to xRollbackCallback() */   
      void (*xRollbackCallback)(void*); /* Invoked at every commit. */
      void *pUpdateArg;
      void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
      void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*);
      void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*);
      void *pCollNeededArg;
      sqlite3_value *pErr;          /* Most recent error message */
      char *zErrMsg;                /* Most recent error message (UTF-8 encoded) */
      char *zErrMsg16;              /* Most recent error message (UTF-16 encoded) */
      union {
        int isInterrupted;          /* True if sqlite3_interrupt has been called */
        double notUsed1;            /* Spacer */
      } u1;
    #ifndef SQLITE_OMIT_AUTHORIZATION
      int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
                                    /* Access authorization function */
      void *pAuthArg;               /* 1st argument to the access auth function */
    #endif
    #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
      int (*xProgress)(void *);     /* The progress callback */
      void *pProgressArg;           /* Argument to the progress callback */
      int nProgressOps;             /* Number of opcodes for progress callback */
    #endif
    #ifndef SQLITE_OMIT_VIRTUALTABLE
      Hash aModule;                 /* populated by sqlite3_create_module() */
      Table *pVTab;                 /* vtab with active Connect/Create method */
      sqlite3_vtab **aVTrans;       /* Virtual tables with open transactions */
      int nVTrans;                  /* Allocated size of aVTrans */
    #endif
      Hash aFunc;                   /* All functions that can be in SQL exprs */
      Hash aCollSeq;                /* All collating sequences */
      BusyHandler busyHandler;      /* Busy callback */
      int busyTimeout;              /* Busy handler timeout, in msec */
      Db aDbStatic[2];              /* Static space for the 2 default backends */
    #ifdef SQLITE_SSE
      sqlite3_stmt *pFetch;         /* Used by SSE to fetch stored statements */
    #endif
      u8 dfltLockMode;              /* Default locking-mode for attached dbs */
    };

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQLite][ADO.NET] utiliser SQLite avec le framework 4
    Par TheBlackReverand dans le forum ADO.NET
    Réponses: 3
    Dernier message: 25/06/2010, 21h05
  2. [SQLite ADO.NET Provider] Optimisation de performances
    Par Zoolive dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/07/2009, 15h25
  3. SQLite 3 - .NET
    Par rvp68 dans le forum SQLite
    Réponses: 1
    Dernier message: 01/01/2008, 13h26
  4. SqLite avec .Net : JOIN très très lent.
    Par Bluedeep dans le forum Accès aux données
    Réponses: 3
    Dernier message: 20/01/2007, 18h34
  5. [VB.Net/SQLite] Comment gérer ADO.Net avec ce type de Serveur BD ?
    Par PM_calou dans le forum Accès aux données
    Réponses: 20
    Dernier message: 06/08/2006, 19h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo