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

C# Discussion :

C# et SQL Compact, comment travailler avec les deux


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 34
    Points
    34
    Par défaut C# et SQL Compact, comment travailler avec les deux
    Bonjour,

    Je doit faire une petite application. Je ne pense pas qu'installé un serveur sql soit pertinant pour le projet donc j'ai regarder du coté de sql compact.

    J'aime le concept, mais j'ai des soucis. J'ai visual studio 2008 sp1. j'ai crée un projet windows_form, ensuite ajouter un composant "base de données locale". Il me crée donc 2 fichiers,
    un sdf (la base de donnée local sql compact) et un .xsd qui semble etre le designer.

    J'ai donc crée l'architeture de mes tables, ensuite dans une form je crée un "DataGridView" et ensuite je le lie avec le .xsd sur la table. Tout se passe bien dans le meilleur des mondes.

    Maintenant je voudrai faire un insert... Je fait comment? je suis perdu avec ces deux fichiers. Il faut refaire les tables dans le .sdf à la main? et ensuite faire un insert comme j'en trouve sur le net. Dans ce cas il se passe quoi pour le dataview? il serra mis a jour? Les infos sont dans le sdf?

    Merci de votre attention, et dsl je débute un peu en C#.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Le xsd est la définition d'un DataSet, c'est à dire une copie en mémoire de tout ou partie de la base de données. Pour modifier les données d'une table de la base, tu modifies en fait la DataTable correspondante dans le DataSet, et tu appelles la méthode Update du TableAdapter (normalement généré aussi par le designer), qui se chargera d'exécuter les commandes SQL nécessaires (INSERT/UPDATE/DELETE).

    Pour plus d'infos sur les DataSets et DataAdapters, regarde ce tutoriel

    Après, rien ne t'oblige à utiliser un DataSet, tu peux tout à fait supprimer le XSD et choisir une autre option :
    - exécution "manuelle" de requêtes SQL sur la base (cf. ce tuto
    - Linq to SQL
    - Entity Framework (tuto)
    - un autre ORM (NHibernate par exemple) ou un système de génération de DAL (Subsonic par exemple)

  3. #3
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Le xsd est la définition d'un DataSet, c'est à dire une copie en mémoire de tout ou partie de la base de données. Pour modifier les données d'une table de la base, tu modifies en fait la DataTable correspondante dans le DataSet, et tu appelles la méthode Update du TableAdapter (normalement généré aussi par le designer), qui se chargera d'exécuter les commandes SQL nécessaires (INSERT/UPDATE/DELETE).

    Pour plus d'infos sur les DataSets et DataAdapters, regarde ce tutoriel

    Après, rien ne t'oblige à utiliser un DataSet, tu peux tout à fait supprimer le XSD et choisir une autre option :
    - exécution "manuelle" de requêtes SQL sur la base (cf. ce tuto
    - Linq to SQL
    - Entity Framework (tuto)
    - un autre ORM (NHibernate par exemple) ou un système de génération de DAL (Subsonic par exemple)
    Merci beaucoup pour les explication c'est plus clair pour moi. Je vais essayer avec les DataSet, normalement plus rapide une fois maitrisé.

    Voici mon bout de code pour l'instant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                DataSet db = new Database1DataSet();
                   DataRow r = db.Tables["Chats"].NewRow();
                   r["nom"] =  "mon chat" ;
                  db.Tables["Chats"].Rows.Add(r);
    Database1DataSet c'est le DataSet généré avec mon sql compact (qui d'ailleur est totalement vierge donc je pense qu'il va crée les tables si besoin par rapport au xml qu'il a. Mais pour la partie insertion dans ma table je ne trouve pas de SqlAdapter déja existant.
    Vous avez une idée du nom? Dans le tuto tout est fait à la main moi c'est déja à moitier existant donc je demande.

    Autre question au passage, c'est facile de faire des recherches avec les DataSet?


    edit: c'est de l'ADO.net ce que je fait? j'ai vu des tutos assez proche de ce que cherche à faire. Et je doit ouvrir le fichier sql compact en dirai et faire un listing de la table que l'on cible avec l'adapter. Donc au finale double boulot, je crée mes tables 2 fois...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par c_creatix Voir le message
    qui d'ailleur est totalement vierge donc je pense qu'il va crée les tables si besoin par rapport au xml qu'il a
    Non, le dataset ne crée pas la table, c'est toi qui doit la créer. En général on fait plutôt les choses dans l'autre sens : on crée d'abord les tables dans la base, et on utilise le designer pour créer automatiquement la DataTable correspondante dans le dataset.

    Citation Envoyé par c_creatix Voir le message
    Mais pour la partie insertion dans ma table je ne trouve pas de SqlAdapter déja existant.
    Vous avez une idée du nom? Dans le tuto tout est fait à la main moi c'est déja à moitier existant donc je demande.
    Normalement les adapteurs sont crées automatiquement quand on importe une table de la base vers le dataset. Si tu as créé la table manuellement, tu peux créer aussi l'adapteur à l'aide du designer.

    Citation Envoyé par c_creatix Voir le message
    Autre question au passage, c'est facile de faire des recherches avec les DataSet?
    Oui, tu peux faire des "requêtes" simples avec la méthode DataTable.Select ou en utilisant une DataView par exemple.

    Citation Envoyé par c_creatix Voir le message
    edit: c'est de l'ADO.net ce que je fait?
    Oui

    Citation Envoyé par c_creatix Voir le message
    Donc au finale double boulot, je crée mes tables 2 fois...
    Pas si tu les importes de la base avec le designer... Il suffit d'afficher ta base dans l'explorateur de base de données et de faire glisser la table voulue vers le dataset

  5. #5
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup pour les explications je regarde ce soir. C'est pas facile quand on débarque avec toutes ces technologies en .NET.
    Les tutoriaux microsoft c'est bcp de clic clic mais au final de l'affichage seulement... Enfin j'ai fait des recherches sql compact C# la doc ADO.NET doit etre plus adapté

  6. #6
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 34
    Points
    34
    Par défaut
    Dsl mais je suis de retour Voici mon bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                DataSet db = new Database1DataSet();
                DataRow r = db.Tables["Chats"].NewRow();
                r["Nom"] =  "mon chat" ;
                db.Tables["Chats"].Rows.Add(r);
                Database1DataSetTableAdapters.ChatsTableAdapter DAchat = new Database1DataSetTableAdapters.ChatsTableAdapter();
                DAchat.Insert("Mon chat2");
    Il ne me retourne pas d'erreur et ne fait rien. J'ai penser à utilisé la méthode update mais c'est pour mettre a jour seulement. La méthode insert lui prend les valeurs des colonnes.

    J'ai essayer des select avec visualstudio de faire des select mais je ne trouve pas ma valeur. J'ai vu des exemples de codes mais il y avais un insert en sql donc bon si c'est pour faire des requétes à la main j'ai plus vite fait de tappé directement dans le fichier à la main, non?

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    En fait le nom Update est trompeur... il y a une de ses formes qui sert spécifiquement à mettre à jour un enregistrement directement en base, mais les autres appliquent à la base de données tous les changements effectués dans le dataset (ou la DataTable, ou les DataRow) que tu passes en paramètre. Il faut donc faire ça :

    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DAchat.Update(db.Tables["Chats"]);

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 562
    Points : 859
    Points
    859
    Par défaut
    Bonjour à tous, je m'invite dans la conversation suite à la remarque de 2 choses.

    J'ai essayer des select avec visualstudio de faire des select mais je ne trouve pas ma valeur.
    C'est un probleme connu, en fait lorsque tu exécutes ton programme en mode debug ou release, visual studio copie par défaut ta base de données locale (.sdf) dans le repertoire bin\debug ou bin\release, donc tu fait un jeu d'essai avec et tu ne vois pas les valeurs ajoutées dans la base située à la racine de ton projet. => Solution, soit ouvrir la bonne base pour voir si les données ont été entrées ou bien changer les options du fichier de données (selection du fichier sdf, fenetre des propriétés, copier dans le répertoire de sortie)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     DataSet db = new Database1DataSet();
                DataRow r = db.Tables["Chats"].NewRow();
                r["Nom"] =  "mon chat" ;
                db.Tables["Chats"].Rows.Add(r);
                Database1DataSetTableAdapters.ChatsTableAdapter DAchat = new Database1DataSetTableAdapters.ChatsTableAdapter();
                DAchat.Insert("Mon chat2");
    Comme le dit tomlev, il faut passer par la méthode Update et non Insert. Par contre une des surcharges de cette méthode accepte un DataRow comme parametre. Ton code devient donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     DataSet db = new Database1DataSet();
                DataRow r = db.Tables["Chats"].NewRow();
                r["Nom"] =  "mon chat" ;
                db.Tables["Chats"].Rows.Add(r);
                Database1DataSetTableAdapters.ChatsTableAdapter DAchat = new Database1DataSetTableAdapters.ChatsTableAdapter();
                DAchat.Update(r);

  9. #9
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 34
    Points
    34
    Par défaut
    D'accord je test ce soir alors. J'ai commencé avec mes insert et ouvrir le sdf avec la méthode traditionel qui fonctionne.
    Pour l'update j'ai testé avec la row car le dataSet il n'y a pas de constructeur effectivement.
    Pour le probléme de .sdf il faut juste qu'il le place à la racine (avec les propriétes) comme ça je tappe dans le mm avec mes requetes dans en mode débug et dans visual studio.

    Pour l'instant je suis à l'ancienne, je test pour voir la méthode voir si c'est bon, mais je me demande quand meme que m'apporte cet solution par rapport à la mienne? Pas de requettes a faire à la main c'est tout?

    En tout cas merci de votre patience, j'ai bien en téte comment faire le reste mais je suis pas à l'aise avec les bases de données avec les dataset et l'ADO.NET

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par c_creatix Voir le message
    mais je me demande quand meme que m'apporte cet solution par rapport à la mienne? Pas de requettes a faire à la main c'est tout?
    Ben je trouve que c'est déjà beaucoup... dans l'appli que je développe au boulot, la plupart des bugs sont liés à des erreurs dans le SQL. Si tu ne l'écris plus manuellement, tu élimines une des principales causes d'erreur !

    Mais ce n'est pas le seul avantage... le fait d'avoir les données en cache en mémoire permet d'avoir de bien meilleures performances lors de la recherche, par exemple (en tous cas meilleures qu'en réexécutant une requête sur la base...)

  11. #11
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 34
    Points
    34
    Par défaut
    Moi c'est une petite application pour une association, quelques ajouts de chats /jrs et adoptions donc peut être pas besoin d'un marteau pour écrasé une mouche, non?

    Les requetes je sais faire je perds moins de temps avec, la par exemple je cherche comment préparé les requetes comme je le fais actuellement, apres il faudra si j'utilise la méthode voir comment faire les jointures, dans le DataSet à première vu avec les tables. Pour les requetes je ne m'en fais pas trop il n'y en a pas beaucoup, une recherche et 2 inserts grosso modo.

    Je fais du php principalement donc je suis habitué à manipulé du sql et à préparer les commandes avant de les passé dans le serveur pour éviter les injections ect...

    Je pense donc faire les requetes à la main et plus tard si j'ai du temps je regarderai du coter du ADO.NET, car la technologie semble quand meme intéréssante.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    As you like...

    Par contre j'oubliais un autre avantage très important des datasets, c'est que tu peux utiliser le binding (particulièrement pratique pour les grilles, listbox et autres combobox). En faisant des requêtes manuellement tu perds cet avantage (à moins de créer des classes qui représentent tes objets et que tu renseignes avec les résultats de la requête, et de binder sur ces classes)

    Citation Envoyé par c_creatix Voir le message
    Je pense donc faire les requetes à la main et plus tard si j'ai du temps je regarderai du coter du ADO.NET, car la technologie semble quand meme intéréssante.
    quand tu fais des requêtes à la main tu utilises aussi ADO.NET

  13. #13
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 34
    Points
    34
    Par défaut
    Justement avec le databindig c'est très bien mais j'ai peur de me compliquer la vie, car je pense faire une form de recherche qui selon les critéres va taper dans une table ou une autre. Donc moyen pour mon cas je pense car les colonnes sont crée lors de la compilation quand j'utilise le designer(mais possible de cacher le tableau et modifier les nom de colonnes selon les resultat de la requéte avec la méthode dataset je pense).

    Je pense pour faire le databinding crée un DataSet qui contiendra le résultat de ma requete et binder mon tableau sur le DataSet que je crée à la main selon les recherches. Je n'ai pas encore trouver d'explications très clair sur le sujet, mais je pense que c'est réalisable assez simplement.

    edit: apres tout c'est tjr possible d'utiliser les deux.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/10/2012, 14h20
  2. SQL Compact Edition & datetime avec les secondes
    Par slacky dans le forum Développement
    Réponses: 4
    Dernier message: 15/09/2011, 14h49
  3. comment travailler avec sql sever 2000
    Par samdou dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 04/12/2010, 20h18
  4. Réponses: 4
    Dernier message: 02/05/2009, 17h56
  5. Réponses: 2
    Dernier message: 22/06/2006, 11h03

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