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

Visual Studio Discussion :

Connexion à une BDD SQLite


Sujet :

Visual Studio

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Connexion à une BDD SQLite
    Bonjour @ tous,

    Je suis sous Visual studio 2015 (framework 4.0) et je dois accéder à une DBB SQLite.
    J'ai donc été dans le gestionnaire de paquets Nuget et ai installé SQLite (v1.0.103) pour 32 et 64 bit.
    Ce qui m'a ajouté 3 DLL à mon projet (dont les 2 essentielles: System.Data.SQLite, System.Data.SQLite.Linq).
    J'ai tenté un accès à un fichier (déjà ouvert via administrator auparavant, il est valide) avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Function getCommandLite(pReq As String, ByRef pConn As SQLiteConnection, ByRef pDa As SQLiteDataAdapter) As SQLiteCommand
            pConn = New SQLiteConnection($"Data Source={_ConStr}") 
            pDa = New SQLiteDataAdapter(pReq, pConn)
            pConn.Open()
            Dim commande As SQLiteCommand = pConn.CreateCommand()
            commande.CommandText = pReq
            Return commande
        End Function
    Et il plante sur "pConn.Open()" avec, comme message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception levée : 'System.AccessViolationException' dans System.Data.SQLite.dll
    Informations supplémentaires : Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.
    J'ai tenté pas mal de chaines de connexion et autre bricolages, mais rien à faire.

    Suivant cet article, J'ai donc été télécharger les DLL sur le site officiel (version 1.0.66 du coup ).
    Je les ai intégrées à mon projet, et ça fonctionne direct (uniquement avec la 64bits, surement car mon poste est en 64).

    Mais ça m'ennuie car ça me fait gérer des DLL 32 et 64 sur le même projet, ce que je ne sais pas faire et qui a l'air compliqué d'après ce que j'ai pu lire pour le moment.

    Est ce que quelqu'un a des lumières sur le sujet ?
    David.

  2. #2
    Invité
    Invité(e)
    Par défaut
    tu peux essayer de mettre (regarde cette page)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Data Source={0}; Version=3"
    tu peux essayer de changer l'ordr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pConn.Open()
    pDa = New SQLiteDataAdapter(pReq, pConn)

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour Benoit,

    Merci pour ta participation.

    Oui, j'ai bien essayé ces solutions, mais rien ne change.
    Pour info, j'ai essayé avec tous ces paramètres:
    ;Version=3;New=False;Compress=True;PRAGMA cache_size=20000; PRAGMA page_size=32768; PRAGMA synchronous=on

    J'ai plus tendance à penser que c'est une incompatibilité de version entre le Framework4 et la SqLite 1.0.103.
    Malheureusement, Nuget ne propose que cette version, aucune en dessous.

    L'idéal serait que je trouve une version compatible qui fait 32 et 64 bits dans la même DLL...
    David.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    J'esper que cela peut aider : http://winrt.free.fr/?p=58

    C est la version 3.7.14.1 qui s installe

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Salut,

    Pourquoi pas, je ne suis pas en RT, mais le coté "embeded" peut coller.
    Je vais investiguer la piste, merci.
    David.

  6. #6
    Invité
    Invité(e)
    Par défaut
    bizarre ton problème, je viens de tester un petit projet que j'avais.
    je l'ai passé en framework 4. J'ai réinstallé le paquet SQLite (1.0.103).
    Le projet fonctionne correctement.

    ta base SQLite est bonne, tu suppose que tu l'as bien testé ? avec quoi l'as-tu créée ?
    de mémoire j'avais créé la mienne avec l'extension de firefox sqlite manager.

  7. #7
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    En fait, ce sont des fichiers issus du logiciel QuickDevis.
    Ils utilisent SQLite, mais renomment leurs fichiers en *.qdb.
    Mais ça s'ouvre sans soucis avec SqLite administrator.

    Et moi, j'arrive à les ouvrir avec les version 64 ou 32 bits (selon le poste), mais pas avec la version Nuget qui est censée faire les 2.

    Fichier ci-joint.
    Fichiers attachés Fichiers attachés
    David.

  8. #8
    Invité
    Invité(e)
    Par défaut
    bonjour,

    j'ai testé ta base, tout semble fonctionner correctement.
    j'ai créé un projet avec le framework en version 4.

    j'arrive bien a accéder à ta base de données.

    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
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    using System.IO;
    using System.Data.SQLite;
     
    namespace BaseSQLiteTest
    {
        public partial class Form1 : Form
        {
            private string pathDB = Path.Combine(Application.StartupPath, "test.qdb");
            private SQLiteConnection conn;
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    string s = "Data Source={0}; Version=3; New=False; Compress=True;";
                    this.conn = new SQLiteConnection(String.Format(s, this.pathDB));
                    this.conn.Open();
     
                    MessageBox.Show("OK");
     
                    SQLiteDataAdapter da = new SQLiteDataAdapter();
                    da.SelectCommand = new SQLiteCommand("SELECT * FROM Articles", this.conn);
                    DataSet ds = new DataSet();
                    da.Fill(ds, "Articles");
     
                    DataTable dt = ds.Tables["Articles"];
     
                    foreach (DataRow row in dt.Rows)
                    {
                        listBox1.Items.Add(row["Description"]);
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Erreur");
                }
            }
        }
    }
    j'ai fait ce code rapidement, c'est surement pas terrible, mais c'est juste un test.
    j'ai renommé ta base test.qdb. je l'ai ajouté au projet, elle se copie dans le répertoire de l'exe.

    je peux t'envoyer les sources si tu veux. je ne les ai pas mis là, car même compressées elles font 29mo.

  9. #9
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Salut Benoit,

    C'est étrange, je regarde ton code et il est similaire au mien.
    Je suis sous Windows 10, mais je ne pense pas que ça ait un impact.

    Je ne peux pas t'envoyer mon projet, c'est un truc énorme.
    Mais voilà la partie isolée (bon, c'est du VB, ce n'est pas un choix de coeur...) :
    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
            Private Function getCommandLite(pReq As String, ByRef pConn As SQLiteConnection, ByRef pDa As SQLiteDataAdapter) As SQLiteCommand
                pConn = New SQLiteConnection(_ConStr) ' ;Version=3;New=False;Compress=True;PRAGMA cache_size=20000; PRAGMA page_size=32768; PRAGMA synchronous=on
                pDa = New SQLiteDataAdapter(pReq, pConn)
                pConn.Open()
                Dim commande As SQLiteCommand = pConn.CreateCommand()
                commande.CommandText = pReq
                Return commande
            End Function
            Public Function getDtLite(pReq As String) As DataTable
                Dim ds As New DataSet("Name")
                Dim dbconn As SQLiteConnection = Nothing
                Dim da As SQLiteDataAdapter = Nothing
                Try
                    Dim sql_cmd As SQLiteCommand = getCommandLite(pReq, dbconn, da)
                    ds.Reset()
                    da.Fill(ds)
                    dbconn.Close()
                Catch ex As Exception
                    msgErr = ex.Message
                End Try
                If (ds.Tables.Count > 0) Then
                    Return ds.Tables(0)
                Else
                    Return Nothing
                End If
            End Function
    Prit par le temps, j'ai pu détourner le truc en utilisant un de leur module qui permet de transférer les datas vers SQL server, mais je vais devoir me repencher sur le souci prochainement.

    Merci.
    David.

  10. #10
    Invité
    Invité(e)
    Par défaut
    tu sais qu'elle ligne bloque dans ton code.

    je suis aussi sous w10, j'ai utilisé vs express 2015 pour mon test.

    que contient la variable pReq ?

  11. #11
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Oui, j'ai également VS 2015

    Une requête tout ce qu'il y a de plus simple, et qui passe très bien sous administrator:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT A.*, D.CostPerUnitMT, D.Rebate, D.RebateCode FROM Articles A LEFT JOIN ColumnsDataMT D ON D.IDInArticles=A.RowID
    WHERE A.Reference='01' AND A.Manufacturer='AAF';
    C'est sur le pConn.Open() qu'il plante. Donc avant la requête.
    David.

  12. #12
    Invité
    Invité(e)
    Par défaut
    j'ai testé la même requête elle fonctionne bien.

    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
                    using (this.conn = new SQLiteConnection(String.Format(s, this.pathDB)))
                    {
                        this.conn.Open();
                        string sqlStr = "SELECT A.*, D.CostPerUnitMT, D.Rebate, D.RebateCode FROM Articles A LEFT JOIN ColumnsDataMT D ON D.IDInArticles=A.RowID "
                                        + "WHERE A.Reference = '01' AND A.Manufacturer = 'AAF'; ";
                        using (SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT * FROM Articles", this.conn))
                        {
                            DataTable dt = new DataTable();
                            da.Fill(dt);
     
                            this.listBox1.DisplayMember = "Description";
                            this.listBox1.ValueMember = "Description";
                            this.listBox1.DataSource = dt;
                        }
                    }
    le chemin de la base de données contenu dans la variable "_ConStr" est bon ?
    après, je n'ai plus d'idées

  13. #13
    Invité
    Invité(e)
    Par défaut
    mon précédent code n'était pas bon.
    j'ai modifié la requête, avec le where la base ne retourne rien.
    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
                    using (this.conn = new SQLiteConnection(String.Format(s, this.pathDB)))
                    {
                        this.conn.Open();
                        string sqlStr = "SELECT A.*, D.CostPerUnitMT, D.Rebate, D.RebateCode FROM Articles A LEFT JOIN ColumnsDataMT D ON D.IDInArticles=A.RowID "
                                        //+ "WHERE A.Reference = '01' AND A.Manufacturer = 'AAF'; "
                                        ;
                        using (SQLiteDataAdapter da = new SQLiteDataAdapter(sqlStr, this.conn))
                        {
                            DataTable dt = new DataTable();
                            da.Fill(dt);
     
                            this.listBox1.DisplayMember = "Description";
                            this.listBox1.ValueMember = "Description";
                            this.listBox1.DataSource = dt;
                        }
                    }

  14. #14
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Merci pour les pistes Benoit,

    Je vais replonger dedans prochainement, peut-être aurais-je plus de lucidité... Ou plus de chance.

    Bonne soirée.
    David.

  15. #15
    Invité
    Invité(e)
    Par défaut
    ok, bon courage.

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Bon je sais pas si ça va aider mais moi j ai solutionné tous mes pbs (exception faite des requêtes ) avec https://www.devart.com/dotconnect/sqlite/

    Il y a une version standard, gratuite, qui me suffit amplement mais je ne suis que debutant et n ai pas les mêmes besoins.

  17. #17
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Salut SP,

    Merci pour le lien, Je vais l'essayer.
    Elle a l'air de faire ce que j'ai besoin dans sa version gratuite.
    Tu as essayé sur du 32 et 64 bits ?
    David.

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Je n ai pas le souvenir d avoir choisi une version mais si j ai eu à le faire, j ai installé la 64bits pour coller à ma machine

Discussions similaires

  1. [D2005] Connexion à une BDD Access
    Par landry005 dans le forum Bases de données
    Réponses: 6
    Dernier message: 24/02/2006, 11h05
  2. Réponses: 5
    Dernier message: 03/02/2006, 13h47
  3. connexion à une bdd mysql en asp
    Par asetti dans le forum ASP
    Réponses: 3
    Dernier message: 31/10/2005, 18h31
  4. [Applet][MySQL] connexion à une BDD
    Par Michel38 dans le forum JDBC
    Réponses: 19
    Dernier message: 20/07/2005, 14h59
  5. Erreur de connexion à une BDD SQL Server 2000 avec BDE
    Par SchpatziBreizh dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/06/2005, 11h22

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