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 :

Binding source "à la mano" [Débutant]


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    stagiaire IT
    Inscrit en
    Août 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire IT
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 78
    Par défaut Binding source "à la mano"
    Bonjour à tous ,

    Dans mon projet, j'ai quelques listbox linkées à des tables.

    Afin de rendre mon projet MultiUser, je crée des tables spécifiques à chaque utilisateur, semblables à celles présente de base.

    Quand un utilisateur ouvre sa page, il faudrait que ce soit les données de sa table qui apparaisse, mais je n'y arrive pas.
    J'ai essayé bêtement avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.tableCPYBindingSource = Environment.UserDomainName + Environment.UserName + "Table_CPY";
    et en essayant avec diverse méthode un peu crapuleuse, mais rien n'y fait

    merci pour vos éclaircissements !

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Juste une question :
    Qu'appelles tu MultiUser ?

    Je me demande si tu ne fais pas une erreur de conception.

  3. #3
    Membre confirmé
    Homme Profil pro
    stagiaire IT
    Inscrit en
    Août 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire IT
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 78
    Par défaut
    En fait, j'appelle multi user le fait que l'application sera sur un serveur, et plusieurs utilisateurs peuvent s'y connecter et enregistrer leurs données dans la base, par le biais de tables qui leur sont allouées.

    Je pensais garder les bindings vers les tables de base que j'utilisais en local, et m'en servir comme table de transition, une sorte de mémoire vive dans laquelle on injecte les tables de l'utilisateur, mais je pense que se serait une erreur, puisque cette "mémoire vive" se retrouve commune et donc si plusieurs utilisateurs se connectent en même temps, ils vont écraser un à un les données des autres et se retrouver avec des données qui ne leur sont pas propre.

    Ce n'est peut-être pas hyper clair, en gros le problème c'est clairement, chaque utilisateur crée ses tables, je connais le nom des tables, mais j'aimerais que chacun ait les données de sa propre table dans une combobox donnée

  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
    Par défaut
    Ca n'a pas de sens de créer des tables distinctes pour chaque utilisateur ! Comment tu vas faire le jour où tu voudras requêter sur les données de tous les utilisateurs ? Tous les utilisateurs doivent utiliser les mêmes tables, avec une colonne qui indique l'utilisateur...

  5. #5
    Membre confirmé
    Homme Profil pro
    stagiaire IT
    Inscrit en
    Août 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire IT
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 78
    Par défaut
    mmh c'est vrai que je peux faire comme ça j'imaginais autre chose pour la gestion des utilisateurs, mais je vais retenir ta solution qui est certainement plus avisée vu ton expérience !

    Du coup question subsidiaire, et c'est en fait ça qui m'a bloqué puisque je n'arrivais pas à l'envisager : comment faire pour filtrer les donner dans la combobox?

  6. #6
    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
    Par défaut
    Citation Envoyé par Jeecer Voir le message
    Du coup question subsidiaire, et c'est en fait ça qui m'a bloqué puisque je n'arrivais pas à l'envisager : comment faire pour filtrer les donner dans la combobox?
    avec un WHERE dans la requête SQL...

  7. #7
    Membre confirmé
    Homme Profil pro
    stagiaire IT
    Inscrit en
    Août 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire IT
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 78
    Par défaut
    ok, mais en fait je suis sous visual studio 2008, mes combobox sont configurées directement via l'interface graphique.

    Et justement c'est l'objet de ma question, comment je dois m'y prendre pour le lier à la main, et pas par l'interface graphique?

  8. #8
    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
    Par défaut
    Ah ok... En fait j'ai jamais beaucoup utilisé le designer pour ce genre de chose, mais de mémoire je crois que dans le designer du DataSet tu peux configurer les requêtes utilisées par les TableAdapters, et leur ajouter des paramètres.

    Sinon tu peux toujours gérer ça à la main avec ADO.NET, tu trouveras des explications dans ces tutos :
    http://dotnet.developpez.com/articles/ado1/
    http://dotnet.developpez.com/articles/ado2/

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Donc c'était bien une erreur de conception. Si toutes les entreprises devait dupliquer des bases pour chaque connexion cliente, les banques, les industrielles et les e-commerces feraient franchement la gueule et on aurait besoin d'un datawarehouse pour chaque entreprise.

    Donc tu vas gérer des clients dans tes tables, c'est bien mieux pour faire les choses bien tu devrais regarder comment faire pour réaliser des requêtes dans ta base de données via du code C#, par contre un conseil pour gagner beaucoup en performance, crée des procédures stockés que tu appels de ton code.

    Si tu ne veux pas te prendre la tête (et que tu n'as aucune contrainte technique) tu peux utiliser un ORM (Object Relational Mapping) comme Linq To SQL (pour le 3.5) ou Entity Framework (4.0).

    Sinon pour répondre à ta première question c'est un patron de conception qui va rendre abstrait l'accès à tes données, en les encapsulant dans des objets. Et tu traites directement ta source de données objets Si ce type de problématique t'intéresse va te renseigner sur les "Design Pattern" .

    Voilà,
    @

  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
    Par défaut
    Citation Envoyé par morgand Voir le message
    Linq To SQL (pour le 3.5) ou Entity Framework (4.0).
    Entity Framework aussi est dispo en 3.5 SP1

  11. #11
    Membre confirmé
    Homme Profil pro
    stagiaire IT
    Inscrit en
    Août 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire IT
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 78
    Par défaut
    Merci tous les deux!


    Je vais regarder un peu les tutos, mais c'est vrai que j'utilise déjà ADO.NET et que j'avais pensé à faire une requête et remplir les combobox comme ça, mais je trouvais ça pas hyper propre, et pas trop optimisé.


    Bon je vais forcément trouver mon bonheur avec tout ça! Vous m'avez bien fait faire le tour, et c'est clair dans ma tête maintenant!

    Merci!!


    (et oui je suis "bloqué" au 3.5 )

  12. #12
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Entity Framework aussi est dispo en 3.5 SP1
    Ouep c''est vrai mais je le trouve pas top, et il manque plein de truc je trouvais à l'époque. Mais dans le 4.0 Entity Framework est bien

  13. #13
    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
    Par défaut
    Citation Envoyé par morgand Voir le message
    Ouep c''est vrai mais je le trouve pas top, et il manque plein de truc je trouvais à l'époque.
    C'est pas faux...

  14. #14
    Membre confirmé
    Homme Profil pro
    stagiaire IT
    Inscrit en
    Août 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire IT
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 78
    Par défaut
    Re-bonjour,

    après de multiple tentative j'ai tenté un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    table_CPYTableAdapter.Adapter.SelectCommand = "SELECT CounterPartyName FROM Table_CPY WHERE Identifiant LIKE '" + Environment.UserDomainName + "/" + Environment.UserName + "' ";
    Afin de changer la requête du table adaptateur existant pour mettre en place le filtre, mais ça me génère une erreur :

    Error 5 Cannot implicitly convert type 'string' to 'System.Data.OleDb.OleDbCommand'

    Une idée?

  15. #15
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    C'est normal, SelectCommand (table_CPYTableAdapter.Adapter.SelectCommand) n'est pas un string mais un OleDbCommand comme l'indique si bien la doc !

  16. #16
    Membre confirmé
    Homme Profil pro
    stagiaire IT
    Inscrit en
    Août 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire IT
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 78
    Par défaut
    Merci pour la doc!
    il suffisait donc que je mette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    table_CPYTableAdapter.Adapter.SelectCommand = new OleDbCommand("SELECT CounterPartyName FROM Table_CPY WHERE Identifiant LIKE '" + Environment.UserDomainName + "/" + Environment.UserName + "' ");

  17. #17
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Oui c'est déjà mieux, mais utilise des requêtes paramétrées !

  18. #18
    Membre confirmé
    Homme Profil pro
    stagiaire IT
    Inscrit en
    Août 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire IT
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 78
    Par défaut
    Enfin suffisait..

    il y a automatiquement dans le code, du fait du designer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void ChargementCPY_Load(object sender, EventArgs e)
            {
                // TODO: This line of code loads data into the 'bDDDataSet8.Table_CPY' table. You can move, or remove it, as needed.
                this.table_CPYTableAdapter.Fill(this.bDDDataSet8.Table_CPY);
            }

    j'ai mis ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private void ChargementCPY_Load(object sender, EventArgs e)
            {
                // TODO: This line of code loads data into the 'bDDDataSet8.Table_CPY' table. You can move, or remove it, as needed.
                //this.table_CPYTableAdapter.Fill(this.bDDDataSet8.Table_CPY);
                this.table_CPYTableAdapter.Adapter.SelectCommand = new OleDbCommand("SELECT CounterPartyName FROM Table_CPY WHERE Identifiant LIKE '" + Environment.UserDomainName + "/" + Environment.UserName + "' ");
     
            }
    Mais ça ne fonctionne pas, je dois avoir un problème....

    C'est à dire une requête paramétrée? je crée une requête avec des variables abstraites que j'appelle en cas de besoin?

  19. #19
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Quand tu dis que tu as un problème, es ce que c'est un problème de compilation, d'exécution de code C#, d'exécution de requête SQL, ou autres ?

  20. #20
    Membre confirmé
    Homme Profil pro
    stagiaire IT
    Inscrit en
    Août 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire IT
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 78
    Par défaut
    En l'occurence un problème au cerveau... ça me rend fou de pas comprendre pourquoi je n'y arrive pas!

    Là il n'y a aucune erreur de compilation, je pense que la requète est bonne, c'est juste pile ce que je veux, par contre la combobox reliée à cet adaptateur se retrouve vide lorsque je charge la page le contenant...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55

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