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

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut Conseils pour accès aux données SQL SERVER (création d'une appli de gestion des entrées sorties de stock)
    Bonjour à tous,

    je développe une application simple c# de gestion d'entrée sortie de stocks (avec gestion code barre).
    Le serveur principal SQL SERVER contient plusieurs bases de données de type SAGE on va dire qu'elle s'appelle A, B, C.

    En local, je travaillerais sur des pc peu puissant avec 4 GO de RAM et pas un très gros processeur...
    Le pc qui gérera les entrées sorties sera relié par antennes wifis au serveur principal. le serveur principal utilise l'authentification windows et on peut aussi faire des connexion via compte SQL aussi.

    le pc client ira chercher la liste des articles vendus dans une table assez volumineuse d'une des base A, B, ou C, puis traitera les données dans l'interface graphique pour alimenter la base locale du pc client et enregistrer les mouvements.
    je veux juste récupérer les quelques lignes qui m’intéresse de cette table volumineuse afin de ne pas surcharger le réseau ou le pc client.
    Ensuite chaque entrée sortie sera stocké dans des tables sur le pc client comme je disais, et aussi sur le serveur, si la connexion wifi fonctionne.

    J'ai déjà avancé dans le projet j'ai commencé à faire l'interface graphique et je me suis dit que pour stocké les données localement en cas de coupure réseau il me fallait une vrai base de donnée sur chaque pc client.
    En cas de perte de signal wifi comme ça je peux conserver les transactions (entrées/sorties) puis les envoyer sur le serveur principal quand la connexion revient.

    je ne suis pas sur que ce soit la bonne solution mais pour garder une certaine logique dans la gestion des BDD j'ai opté pour SQL SERVER Express.
    Est ce qu'il vaut mieux s'orienter vers une autre solution ? je débute avec C# donc je me demandais s'il n'y a pas une façon de gérer les données de façon plus light (par rapport aux capacités des pc clients)

    Pour résumer je m'oriente actuellement sur un serveur SQL principal, un SQL express pour le stockage des entrées sorties en local sur chaque pc, et un serveur lié pour faciliter les requêtes de mise à jour entre les bases SQL SERVER (mais là j'ai un doute sur les performances est ce qu'il ne vaudrait pas mieux faire les mises à jour via c# directement (si oui quel est la meilleure façon de procéder ?) plutôt que par un serveur lié et des requêtes UPDATE ? qu'est ce qui est le mieux en termes de performances et stabilités compte tenu du fait qu'on sera en wifi et que par moment ça risque de couper ?)

    Sinon je peux aussi faire ça avec Microsoft ACCESS ce qui simplifierait le développement qui s'allonge à mesure que j'apprends le langage c# (car je saurais déjà comment procéder) et me permettrait d'avoir tout en local facilement mais je voulais quelque chose de plus fiable et complet sur le long terme que le moteur JET car j'ai lu que pour les accès distants ce n'est pas terrible...

    Merci et ceux qui prendront la peine de me lire et de me conseiller car vu mon peu d'expérience sur c# je n'ai pas envie de partir sur une mauvaise méthode de travail et d'avoir à tout refaire ensuite.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Perte du Wi-Fi ? Ça arrive ?
    Si oui pas de possibilité de mettre des vrais câbles réseaux ?
    Parce que le plus simple c'est sql server express sur un serveur. Avec des dbs locales ça fait plus de boulot.
    Par contre si c'est pour enregistrer 3 trucs temporaires avant de retrouver la connexion une simple serialisation binaire (transformation d'une instance de classe en un fichier en 2 lignes de code) sera plus simple que des requêtes dans une base.
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Sinon tu peux utiliser sqlite. On peut y trouver pas mal d'avantages.

    Ce qui est intéressant en .NET c'est qu'il suffit d'installer un packet nuget (& le fichier de BDD) et c'est parti! Bien sûr c'est pas un gros moteur comme SQLserver, mais ça peut peut-être te suffire. En plus c'est porté sur toutes plateformes si un jour tu comptes migrer vers mobile par exemple.

  4. #4
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    Merci pour vos suggestions intéressantes.

    Alors concernant les pertes wifi je n'ai pas testé mais nous en avions avant. Le wifi coupait pour quelques minutes ou plus longtemps de temps en temps. Pas possible de passer par un système de câble si ce n'est en partant de l'antenne wifi (il y aura donc tjs la liaison wifi d'un bâtiment à l'autre qui risque de couper.)

    la sérialisation binaire je ne suis pas sur d'avoir déjà eu affaire à ça rien que le nom me donne mal à la tête mais je vais me renseigner là dessus et voir si ça convient.
    J'avais pensé aussi au stockage dans un fichier txt tout bêtement caché dans un dossier ou bien au stockage dans un fichier xml car j'ai déjà utilise des classes comme SAX PARSER en VBA donc ça me semble plus facile que de comprendre comment marche la sérialisation binaire. Mais je dirais que le risque de pertes de données est plus important (coupures de courant ou autres).

    SQLite me séduit plus pour la facilité de déploiement. Je vais regardé comment ça marche ça pourrait me servir pour les petits développements. Le hic dans mon cas c'est que la table qui contient les données sur lesquels je vais travailler occupe environ 1go d'espace dans SQL SERVER, donc finalement plutôt qu'un serveur lié et des requêtes updates régulières, je commence à changer d'avis et je verrais plus une réplication locale dans la base SQL Express afin de pouvoir travailler sur une copie même en cas de coupure de réseau temporaire. ça à aussi l'avantage de me permettre de travailler sur des copies plutôt que sur ma base principale directement. si je fais une bourde avec mes dataset mes dataadapter et mes updates je trouve l'approche plus "safe" et je risque moins d'immobiliser les utilisateurs qui travaillent sur la base principale.

    Reste après la question des performances de SQL Express sur un petit PC client mais bon si ça rame un peu côté client je dirais que ce n'est pas dramatique car le système servira uniquement à l'enregistrement des mouvements et à relever des mails. je veux par contre éviter autant que possible la congestion du réseau qui va faire ralentir tout le monde mais je ne me rend pas bien compte des ressources consommées par une réplication sur le pc serveur et sur le client. Si quelqu'un à un avis éclairé sur le sujet je suis preneur.

    Concernant les packages NUGET quels packages est ce que vous me recommanderiez pour faciliter le développement SQL ? je préfère l'approche tout SQL plutôt que via LINQ pour le moment.
    j'aimerais bien un concepteur graphique pour faire mes requêtes mais je n'ai rien trouvé de convaincant et de gratuit. j'ai peut être mal cherché.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faudrait préciser réellement ce que tu dois gérer.
    si l'utilisateur ne fait qu'ajouter des données sans en lire ca ne sert à rien de répliquer une base de données en local (une réplication à mettre ne place c'est pas simple, et avec express on doit le coder entièrement …)
    si l'utilisateur n'a besoin que d'une nomenclature pour savoir quoi créer il n'y aurait que ca à répliquer

    si tu précises ce que tu dois stocker et à quelle fréquence on pourra te dire si tu as raté quelque chose sur le design de la base de données

    la sérialisation binaire c'est une ligne de code qui transforme une instance de classe en fichier (donc un peu comme écrire dans un fichier texte mais en illisible)
    si la classe est connu des 2 côté tu peux transférer le fichier (ou ses octets) et désérialiser en une ligne de code aussi
    et tu récupères une instance tout prête sans avoir à parser quoi que ce soit
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    En gros je scanne un code barre imprimé sur un document que le client ramène après l'achat en magasin et ça me donne la référence du doc.
    j'interroge la base principale avec ce numéro de document et la table F_DOCLIGNE du logiciel de gestion commerciale SAGE (table qui fait environ 1Go) pour extraire les produits vendues qu'on doit donné au client.
    ça alimente mon interface graphique. le responsable du dépôt double clique sur la ligne qu'il veut donné et ça va lui dire si c'est du neuf, de l'expo, ou du réservé (et ça va aussi interroger localement sa base et le serveur pour savoir si le produit a déjà été donné il y a une semaine pour le même document par exemple c'est pour ça que j'ai besoin d'avoir un système fiable pour stocker les informations.). en bonus je verrais si je fournis l'information sur les stocks réels disponibles mais ce n'est pas le plus important car c'est déjà imprimé sur le papier donné par le client.

    Il scanne le code barre sur le carton du produit et je vérifie que le code barre scanné à l’entrepôt correspond au produit vendu en magasin.
    Si oui ça incrémente le mouvement de sortie, sinon ça demande une confirmation au responsable de l’entrepôt (code barre manquant, effaçé, incorrecte, inconnu, indisponible... etc...).
    le responsable du dépot clique sur la seconde ligne et scanne le second produit.
    et ainsi de suite avant de clôturer son document de sortie qui sera archivé en local sur son pc et envoyé aussi sur le serveur.
    je veux qu'à chaque scan de sa douchette ça stock la manipulation qu'il a fait de manière invisible (une espèce d'audit de chaque scan article afin de voir en détail les manipulations faites avant de clôturer le document) à la fois en local et sur le serveur. donc je me voyais faire une sorte d'ajout d'une ligne à chaque scan dans la base serveur et sur le pc client.

    il y aura aussi dans la table en local et sur le serveur l'heure, la date et le jour de l'enlèvement des produits.

    Il n'y aura pas énormément de ventes par jour je dirais max 30 ou 50 documents et pas énormément de lignes par doc je dirais 5 ou 6 max.

    Enfin sur le serveur les informations seront stockés dans une base séparée de la base en production pour éviter de faire des bêtises...

    je pensais faire deux bases une locale et une sur le serveur surtout pour les histoires de coupures réseaux mais c'est peut etre un peu "usine à gaz" pour pas grand chose ? d'un autre côté je me disais que comme je reste sur des bases SQL SERVER si je fait une requete sur un serveur express client, il suffit de faire la même après sur le serveur principal donc ce n'est pas trop compliqué.

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Si pas de réseau c'est clair qu'il te faut des données locales, donc sûrement une base de donnés quand même.
    Après refaire la même requête s'il y a des colonnes auto incrément ça n'ira pas.
    S'il y a des choses de sage qui te sont utiles mais pas tout, n'en synchroniser qu'une partie vers ta base pourrait réduire la taille des données.
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [Débutant] Accès aux données-Windows Server 2012R2-SERVEUR IIS
    Par bingbing dans le forum Accès aux données
    Réponses: 0
    Dernier message: 14/07/2014, 22h38
  2. Conseil programmation - Accès aux données avec EF
    Par Dan972 dans le forum Entity Framework
    Réponses: 3
    Dernier message: 21/08/2012, 08h55
  3. [PC Serveur] Achat d'un serveur pour base de données SQL Server 2008
    Par hackeddb dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 16/11/2011, 20h25
  4. Accès aux données SQL Server
    Par MayOL69bg dans le forum C#
    Réponses: 9
    Dernier message: 20/03/2007, 10h44
  5. [VB]accès au données sql server
    Par yaobi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 03/02/2006, 18h04

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