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 :

programmation avec c#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Par défaut programmation avec c#
    salut à tous,
    me voila avec un nouveau problème(faute à mon chef).je prie que vous puissiez m' aidez.
    merci d' avance.

    en fait voila mon problème:

    j'ai deux petits programmes ecrits:
    le premier recupère les données d' un fichier CSV et le met dans un tableau à deux dimensions
    j'avais au départ quelque chose de la sorte:
    100;SG
    11;SAS
    ...
    ...
    ...

    et puis je me retrouve avec quelque chose du genre

    TEL USER

    110 SG
    111 SAS
    ...
    ...
    ...



    le deuxieme programme fait une recherche sur un user dans mon active directory et quand il l' a trouvé il lui assigne un numéro de telephone que j'aurais au préalable defini


    en fait je voudrais relier ces deux programmes de telles facon qu'il lise chaque ligne de mon tableau et qu'il puisse directement assigner les numéros de telephone dans active directory.
    c' est à dire:
    il lit la premiere ligne de mon tableau il trouve les initiales SG , le cherche dans mon active directory et lui assigne directement le numéro qui est dans le tableau avec SG. ainsi de suite pour tout les users de mon domaine.
    est ce que vous croyez que c' est possible?


    merci infiniment de l' aide que vous m' apporterez


    cordialement


    pour plus de details voila mes programmes:

    le 1er:


    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    namespace fichier
    {
        public class Form1 : System.Windows.Forms.Form
        {
            private System.Windows.Forms.DataGrid dataGrid1;
            //private System.Windows.Forms.TextBox textBox1;
     
            //<summary>
            // required designer variable.
     
            private System.ComponentModel.Container components = null;
            public Form1()
            {
                // required for windows Form Designer support
     
                InitializeComponent();
     
                // TODO Add any constructor code after InitializeComponent call
            }
     
            // clean up any resources being used
     
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    if (components != null)
                    {
                        components.Dispose();
                    }
                }
                base.Dispose(disposing);
            }
            #region Windows Form Designer generated code
     
            // required method for designer support - do not modify
            // the contents of this method with the code editor.
     
            private void InitializeComponent()
            {
                this.dataGrid1 = new System.Windows.Forms.DataGrid();
                ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
                this.SuspendLayout();
     
                // datagrid1
     
                this.dataGrid1.DataMember = "";
                this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
                this.dataGrid1.Location = new System.Drawing.Point(8, 40);
                this.dataGrid1.Name = "datgrid1";
                this.dataGrid1.Size = new System.Drawing.Size(400, 400);
                this.dataGrid1.TabIndex = 0;
     
                // Form1
     
                this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                this.ClientSize = new System.Drawing.Size(680, 425);
                //this.Controls.Add(this.textBox1);
                this.Controls.Add(this.dataGrid1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.Load += new System.EventHandler(this.Form1_Load);
                ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
                this.ResumeLayout(false);
            }
     
     
            #endregion
            // the main entry point for the application
            [STAThread]
            static void Main()
            {
                Application.Run(new Form1());
            }
            private void Form1_Load(object sender, System.EventArgs e)
            {
     
                // on crée une table
                DataTable dt = new DataTable("test");
                // on crée des colonnes
                dt.Columns.Add("TelephoneNumber", System.Type.GetType("System.Int32"));
                dt.Columns.Add("User", System.Type.GetType("System.String"));
                StreamReader fichier = File.OpenText(@"h:\\export.txt");
                while (fichier.Peek() >= 0)
                {
                    // on lit une ligne et on ajoute
                    string ligne = fichier.ReadLine();
                    string[] vals = ligne.Split(';');
                    DataRow dr = dt.NewRow();
                    try
                    {
                        dr["TelephoneNumber"] = int.Parse(vals[0]);
                        dr["User"] = vals[1];
                        dt.Rows.Add(dr);
                    }
     
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.GetType().ToString());
                        Console.ReadLine();
                    }
     
                }
     
                // on genere le tableau
                dataGrid1.DataSource = dt;
            }
    }
    }

    le 2eme:

    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
    55
    56
    namespace TestAD
    {
     
        class Program
        {
     
            public static void Main(string[] args)
            {
     
                try
                {
     DirectoryEntry deUser = new DirectoryEntry("LDAP://ou=User, ou=User Office, ou=User, DC=hte,DC=intra", "don", "mamanetpapa");
     
                    DirectorySearcher searchEmploye = new DirectorySearcher(deUser);
     
     
     
                    searchEmploye.Filter = "(objectClass=user)";
     
     
     
                    // Display all Employe
     
                    foreach (SearchResult unResultat in searchEmploye.FindAll())
                    {
     
                        DirectoryEntry unEmploye = unResultat.GetDirectoryEntry();
     
     
                    }
     
     
     
                    // Modification of the telephoneNumber
     
     
                    foreach (SearchResult unResultat in searchEmploye.FindAll())
                    {
     
                        DirectoryEntry unEmploye = unResultat.GetDirectoryEntry();
     
     
     
                        if (unEmploye.Properties["SAMAccountName"].Value.ToString() == "sg")
                        {
     
                            // Changing the telephoneNumber
     
                            unEmploye.Properties["telephoneNumber"].Value = "110";
     
     
     
                            // Commit the modification
     
                            unEmploye.CommitChanges();
    }
    PS: J'espere que ca ne fait pas trop long

    merci une fois de plus.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    Si t'as besoin de nous pour ton boulot, un conseil : Change de boulot
    ou prends des cours d'informatiques...

    Bon, a yai, j'me suis defoulé.. donc, maintenant, je peux repondre...

    Je ne vois pas ou il y a un problème ?

    D'un coté, tu recuperes une donnée, apres, il te suffit de faire une requete
    dans activeDirectory, ou bien d'appeler une fonction de recherche...

    (je ne connais pas activeDirectory)...

    Mais là, excuses pour ma rudesse (legendaire, meuh non )... j'arrive pas à voir
    ou il y a une "reelle" complexité ? Au niveau architecture, 'jen vois pas,
    et au niveau code.. pas trop non plus ?

    The Monz, Toulouse


    PS : Par pitié, ne mets pas ton code de lecture dans ton Load mais plutot dans une fonction.. ca sera déja un peu plus propre....

    (l'idéal serait d'avoir une classe dédié à la gestion de tes données)

    Pour info, un excellent tutoriel a été fait sur les modèles en couche... tu devrais, si cela n'est déja fait le lire.. tes yeux je suis sur en serais encore
    transi de bonheur à la lecture du document (j'n'en suis pas l'auteur)

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    tout comme TheMonz je suis un peu dubitatif...

    quel est le problème ? tu as deux programmes.. et alors... je vois pas ce qui t'empeche de les lier directement l'un à l'autre... non ?

    tu execute la premier boucle pour remplir ton dataset, tu execute une seconde boucle sur le dataset qui fait la recherche dans LDAP.

    ah a titre indicatif

    plutot que faire search.Filter = "(objectClass=user)";
    et faire foreach (SearchResult sr in search.FindAll()) { ... }
    je te suggère vivement de faire :

    search.Filter = String.Format("(SAMAccountName={0})", nom);
    SearchResult sr = search.FindOne();

    oh zut alors ...
    tu verras c'est deja beaucoup plus rapide et ca t'évite une boucle inutile... (d'autant LDAP effectue deja une boucle en plus... ton algo passe de O(n²) à O(n^3) voir 4 selon comment est implanté LDAP... pas top question performances.

    donc tu rempli ton dataset et extrait la DataTable

    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach (DataRow dr in dt.Rows) {
      search.Filter = String.Format("(SAMAccountName={0})", dr["nom"]);
      SearchResult sr = search.FindOne();
      /* traitement sur SR et si ya un DirectoryEntry tu fait le changement et le Commit(); */
    }
    et oh miracle ton algo est moins lourd que le précédent.... ce qui est très pratique si ta 5000 entrées à vérifier par exemple... (j'ai deja eu le cas chez un client avec un activedirectory de plus de 21000 entrées)

  4. #4
    Membre expérimenté Avatar de lapanne
    Inscrit en
    Juin 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 200
    Par défaut
    [Your attention please, there is maybe a troll inside]
    Bon pour un post où le gens dit 4 fois merci, 3 fois infiniment, 2 fois désolé et 1 fois j'espère que c'est pas trop long, poste son code bien indenté dans la balise code et aère son post, je vous trouve un peu dur. C'est vrai, c'est son premier post et il se fait tirer à vue dessus (avec un ton quelque peu condescendant )

    Lapanne, défenseur de la veuve, de l'orphelin, de bisouland et du politiquement correct.
    [End of the Troll Alert]

    Et sinon, techniquement, rien à redire sur les deux précédentes interventions.

    Bon, ok ce post ne sert à rien, désolé.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Citation Envoyé par lapanne Voir le message
    le gens dit 4 fois merci, 3 fois infiniment, 2 fois désolé et 1 fois j'espère que c'est pas trop long,
    Y'avait un "for" en "downto" allié à un Random d'une List<BonnExpression>
    ^^

    Citation Envoyé par lapanne Voir le message
    Bon, ok ce post ne sert à rien, désolé.
    Si, on va pouvoir l'ajouter au betisier ou ce post a déjà été noté

    Citation Envoyé par lapanne Voir le message
    Lapanne, défenseur de la veuve, de l'orphelin, de bisouland et du politiquement correct.
    Ta juste remarqué qu'avec un pseudo comme ca, il devait s'agir d'une nana^^

    Moi j'aurais commencé ainsi

    "Bonjour, jeune demoiselle tombé dans les codes et les bits, prete à se faire fe.. engueulée par son patron si elle n'y arrive pas, a grand besoin d'aide! Y'aurait il un bea.. eu.. fo... eu... Mignon informaticien à lunettes pour m'aider ici?"


    Citation Envoyé par lapanne Voir le message
    Bon, ok ce post ne sert à rien, désolé.
    *2 (bon je vais bosser)

    ps: c'est vrai que l'avez démolie la petiote...

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Envoyé par lapanne
    le gens dit 4 fois merci, 3 fois infiniment, 2 fois désolé et 1 fois j'espère que c'est pas trop long,
    Y'avait un "for" en "downto" allié à un Random d'une List<BonnExpression>
    ^^

    Envoyé par lapanne
    Bon, ok ce post ne sert à rien, désolé.
    Si, on va pouvoir l'ajouter au betisier ou ce post a déjà été noté

    Envoyé par lapanne
    Lapanne, défenseur de la veuve, de l'orphelin, de bisouland et du politiquement correct.
    Ta juste remarqué qu'avec un pseudo comme ca, il devait s'agir d'une nana^^

    Moi j'aurais commencé ainsi

    "Bonjour, jeune demoiselle tombé dans les codes et les bits, prete à se faire fe.. engueulée par son patron si elle n'y arrive pas, a grand besoin d'aide! Y'aurait il un bea.. eu.. fo... eu... Mignon informaticien à lunettes pour m'aider ici?"


    Envoyé par lapanne
    Bon, ok ce post ne sert à rien, désolé.
    *2 (bon je vais bosser)

    ps: c'est vrai que l'avez démolie la petiote...
    Je suis d'accord avec les deux premiers post et j'ai hésité à en mettre un dans le genre, mais je me suis retenu.
    Par contre la je trouve que ce dernier poste dépasse les bornes et il est irrespectueux en vers deux membres du forums.
    Chubyone tu peux ne pas être d'accord avec lapanne mais il est intolérable que tu insulte les gens :
    "Bonjour, jeune demoiselle tombé dans les codes et les bits, prete à se faire fe.. engueulée par son patron si elle n'y arrive pas, a grand besoin d'aide! Y'aurait il un bea.. eu.. fo... eu... Mignon informaticien à lunettes pour m'aider ici?"
    Si, on va pouvoir l'ajouter au betisier ou ce post a déjà été noté
    J'espère que tu t'excuseras au près d'eux.

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

Discussions similaires

  1. Liens : Aide à la programmation avec DirectX
    Par djbed dans le forum DirectX
    Réponses: 11
    Dernier message: 22/03/2007, 23h30
  2. [Classpath][execution] executer un programme avec des jar.
    Par LoLoSS dans le forum Général Java
    Réponses: 11
    Dernier message: 26/08/2004, 11h45
  3. Commencer la programmation avec le langage Java ?
    Par von_magnus dans le forum Débuter
    Réponses: 14
    Dernier message: 09/03/2004, 22h19
  4. Réponses: 3
    Dernier message: 27/08/2003, 21h14

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