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 :

[C# 2.0] XML, une DB sure?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Par défaut [C# 2.0] XML, une DB sure?
    Bonjour à tous,

    Je développe une petite application qui utilisera des fichiers XML comme DB. Seulement j'ai un peu peur que ces fichiers deviennenet corrompu après un certains moement.

    Vu que je n'ai pas encore beaucoup utilisé de fichiers XML sous .NET, je me demandais si vous aviez déjà eu des problèmes à long tèrme.

    Par exemple que se passe-t'il s'il y a une coupure de courant en pleine écriture dans un fichier xml? Dans une DB sql ou autre, l'enregistrement n'est pas ajouté et la DB reste clean...j'espere que c'est pareil pour l'XML...


    Voici comment je gère les fichiers XML: Au démarage je les charge dans des dataset, durant l'execution du programme j'enregistre les dataset dans leurs fichiers XML correspondant. Lors de la fermeture du programme je fais un backup de l'ensemble des datasets.

    Je vous montre le code qui charge un dataset;

    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
     private void LoadQuestions()
            {
                if (File.Exists("DATA/CONFIGQ.DLL"))
                {
                    try
                    {
                        dataSetQ.ReadXml("DATA/CONFIGQ.DLL");
                        nbQ = dataSetQ.Tables[0].Rows.Count;
                    }
                    catch
                    {
                        LoadQuestionsBackUp();
     
                    }
                }
                else
                {
                    LoadQuestionsBackUp();
     
                }
            }
     
            private void LoadQuestionsBackUp()
            {
                if (File.Exists("DATA/CONFIGQ.BAK"))
                {
                    try
                    {
                        dataSetQ.ReadXml("DATA/CONFIGQ.BAK");
                        nbQ = dataSetQ.Tables[0].Rows.Count;
                        dataSetQ.WriteXml("DATA/CONFIGQ.DLL");
                    }
                    catch
                    {
     
                        MessageBox.Show("Erreur!\nLe fichier contenant les questions est manquant\nLe programme ne peut fonctionner sans celui-ci et va donc quitter");
                        this.Close();
                    }
                }
                else
                {
                    MessageBox.Show("Erreur!\nLe fichier contenant les questions est manquant\nLe programme ne peut fonctionner sans celui-ci et va donc quitter");
                    this.Close();
                }
            }

    Voilà je voudrais donc savoir si ma méthode est sur à 100%.
    De quelle manière vous procédez, et les problèmes que vous avez pu rencontrer en utilisant l'XML...


  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Par défaut
    Salut,

    Je me suis posé la même question que toi et j'en suis arrivé à la conclusion que ce n'est pas sûr.

    Alors j'ai laissé la possibilité à l'utilisateur de sauver le fichier XML dans un répertoire de son choix à la main.

    Je crois que c'est tout ce que tu peux faire, soit à la main, soit en programmation, mais la sauvegarde reste la seule solution je pense.

  3. #3
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Salut

    C'est deja bien de soucier de cet aspect, les transactions ca existe pas pour les fichiers XML

    Le probleme c'est que tu peux compromettre le fichier de backup aussi. Pour eviter de perdre completement le .bak tu peux faire un roulement sur differents fichiers de sauvegardes.
    Par exemple, tu peux avoir 7 fichiers de sauvegarde (un pour chaque jour de la semaine) si le configq1.bak du mardi est defectueux, tu as toujours le configq0.bak du lundi
    Tres simple a faire de surcroit

  4. #4
    Membre éclairé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Par défaut
    Oui c est une bonne idée les différents backups.

    Un autre problème, indépendant de la programmation, est que l'utilisateur peut s' "amuser" à éffacer les fichiers, c est déjà pour cette raison que j'apelle mes fichier .dll ou .bak.

    Mais vu que le programme sera utilisé dans des écoles j'immagine déjà tous les futurs "pirates" essayant de foutre le bronx. Ou alors je suis parano

    Sinon est-il possible de cacher entièrement un fichier, que celui-ci ne soit accessible qu'au niveau du code. Je sais que sous windows il est possible de cacher des fichiers, mais ceux-ci ne sont caché que si l'utilisateur n'affiche pas les fichiers cachés.

  5. #5
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Pour ma part je pense qu'il serait preferable d'utiliser une Bdd, car plus facile à manipuler et plus fiable.

    MSDE a l'air d'etre une bonne solution.

    A mon sens le XML c'est surtout pour un echange de données pas pour le stockage.

  6. #6
    Membre éclairé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Par défaut
    oui MSDE peut etre bien sauf que mon programme devra tourner sur "tout" type de pc, du vieux p3 Win98 au P4 WinXP.

    Et quand je teste mon setup qui s'occupe de deja installer le framework2 plus mon programme ca peut deja prendre 25' d'instal...donc je vais eviter d'installer un composant supplémeentaire

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Par défaut
    Citation Envoyé par frechy
    Oui c est une bonne idée les différents backups.

    Un autre problème, indépendant de la programmation, est que l'utilisateur peut s' "amuser" à éffacer les fichiers, c est déjà pour cette raison que j'apelle mes fichier .dll ou .bak.

    Mais vu que le programme sera utilisé dans des écoles j'immagine déjà tous les futurs "pirates" essayant de foutre le bronx. Ou alors je suis parano

    Sinon est-il possible de cacher entièrement un fichier, que celui-ci ne soit accessible qu'au niveau du code. Je sais que sous windows il est possible de cacher des fichiers, mais ceux-ci ne sont caché que si l'utilisateur n'affiche pas les fichiers cachés.

    En effet c'est plus ou moins ce que j'ai fait! ;-)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Par défaut
    Citation Envoyé par frechy
    oui MSDE peut etre bien sauf que mon programme devra tourner sur "tout" type de pc, du vieux p3 Win98 au P4 WinXP.

    Et quand je teste mon setup qui s'occupe de deja installer le framework2 plus mon programme ca peut deja prendre 25' d'instal...donc je vais eviter d'installer un composant supplémeentaire
    N'empeche que MSDE c'est vrai que c'est bien.

    Autrement t'as aussi la base de registre....

    lol Je déconne bien sûr!

  9. #9
    Membre éclairé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Par défaut
    Citation Envoyé par joujoukinder
    Autrement t'as aussi la base de registre....


    J'y avais pas pensé tient.

    non mais je pense que je vais simplement cacher les fichiers backup quelques part dans le répertoire de Windows...à moins que quelqu'un connaisse un moyen sur de cacher ou d'empecher la suppression de fichiers

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Par défaut
    Tu peux les protéger avec des droits, les mettre en lecture seule...

  11. #11
    Membre éclairé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Par défaut
    Sauf que mon programme doit pouvoir faire des modifications, et ca n'empeche pas l'utilisateur de pouvoir supprimer les fichiers

  12. #12
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Je suis persuade que la solution .Net existe: il existe un moyen que ton appli cree des fichiers auxquels elle est la seule a pouvoir acceder, en jouant sur les droits d'acces aux fichiers

    J'etais persuade que ca s'appelait Protected Storage, en revanche depuis deux jours, pas moyen de retrouver l'info nulle part. Si quelqu'un sait de quoi je parle et qui trouve un truc la dessus, ca serait bien

  13. #13
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Par défaut
    Je suis persuade que la solution .Net existe: il existe un moyen que ton appli cree des fichiers auxquels elle est la seule a pouvoir acceder, en jouant sur les droits d'acces aux fichiers
    Je suis loin d'être un expert système, mais ça me paraît douteux... Ca serait un vrai bonheur pour les développeurs de virus et autres malwares, et un vrai cauchemar pour les administrateurs système !
    A la limite il est peut-être possible de limiter l'accès aux fichiers au superadmin de la machine... ce qui signifierait donner les droits correspondant à l'appli, et bonjour la sécurité.

    Il vaut peut-être mieux s'orienter dans ce cas vers une solution passant par le cryptage, mais l'impact sur les performances ne serait sans doute pas négligeable. D'un autre côté, si le XML a été choisi pour la persistence, c'est sans doute que la performance n'est pas le souci prioritaire...

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Par défaut
    Il suffit de créer un utilisateur pour ton appli et de ne donner les droits qu'a lui seul et c'est lui qui éxécute ton appli.

    Par contre je ne sais pas comment faire, mais par exemple, je sais que apache fait comme ça.

  15. #15
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Rassure-toi Wyatan, le fichier est toujours accessible par un administrateur, c'est exactement ce que joujoukinder a ecrit et ca s'apelle:

    ISOLATED Storage!

    http://www.codeproject.com/dotnet/IsolatedStorage.asp
    http://msdn2.microsoft.com/en-US/library/bdts8hk0(VS.80).aspx

  16. #16
    Membre éclairé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Par défaut
    Merci pour vos réponses.

    En fait le sujet de ce topic (résolu) se rapproche de mon second topic traitant de la suite du problème...

    Citation Envoyé par frechy
    2 problèmes:

    1. Un utilisateur limité (sous WinXP) ne peut pas installer mon application. Ce n'est pas trop grave, il suffit que l'admin installe le prog pour tout le monde. Mais s'il y a un moyen d'authoriser un utilisateur limité à installer mon appli, ca m'interesserait de savoir comment.

    2. Une fois le programme installé, mon application fonctionne sauf lors de l'écriture dans les fichiers de configuration. Comment puis-je authoriser tous les utilisateurs à modifier ces fichiers?

    Le mieux serait d'authoriser l'accès en écriture pour tous du dossier d'installation lors du setup. Je supose que celà est possible, mais comment :
    Je vous propose donc de continuer la discution à cette adresse;
    [C# 2.0] Authoriser écriture pour utilisateur limité

    Rapidement, je pense qu'isolated storage ne résoudra pas mon problème, puisque celui-ci écrit dans une zone propre à l'utlilisateur
    <SYSTEMROOT>\Profiles\<user>\Application Data
    pour winXP par exemple.

    Moi mon but est d'avoir un répertoire accessible par tous, que chaque utilisateur(admin ou non) puisse utiliser mon programme qui modifie, crée des fichiers dans ce répertoire.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/02/2009, 04h41
  2. Réponses: 2
    Dernier message: 08/12/2008, 17h38
  3. [MySQL] Intégration de fichiers XML à une base MySQL
    Par djibster dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/04/2008, 11h50
  4. Réponses: 1
    Dernier message: 27/10/2007, 23h03
  5. Problème diapo XML une fois online
    Par BnA dans le forum Flash
    Réponses: 2
    Dernier message: 17/07/2007, 18h05

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