Avatar billede lasserasch Juniormester
02. december 2006 - 02:52 Der er 5 kommentarer og
1 løsning

Tjekke en bunke variabler og se om en af dem har en bestemt værdi

Hejsa.

Har lige et hurtigt go'nat spørgsmål.

Sidder og er ved at lave et lille C# program som skal synkronisere en SQL server bruger database med vores Active Directory Database.

Programmet er sådan set færdigt, og virker 100%.

Men jeg har et enkelt dummy spørgsmål ang. min kode.

Jeg har ca. 20 felter hvor jeg skal tjekke om AD feltet stemmer overens med samme felt i min SQL server. Hvis ikke, skal programmet nemlig erstatte de data der står i AD'et med SQL data'erne.

Dette fordi SQL databasen er vores løn system, og hvis en bruger f.eks. bliver gift, gider jeg ikke skulle rette samme data 2 steder.

Min kode til at tjekker felterne ser sådan her ud :

--------
if (AD_Email != SQL_ARYMTX)
{
// Og her så min kode til at rette AD feltet til.
}
--------

Dette nummer laver jeg altså 20 gange, hvilket giver en rimelig lang Void.

Jeg kalder en funktion til at rette AD'et til, men alligevel.


Jeg vil derfor spørge om det på en eller anden smart måde kan lade sig gøre at lægge alle variabler ind i et Array. Og så lave 2 arrays. Et med SQL felterne og et med AD felterne.

Som man kunne lave en if sætning hvor man på en gang kunne tjekke om der var uoverensstemmelser mellem felterne.

Altså noget med

if ( array1(0) != array2(0))
{
foretag AD ændring
)

eller noget i den stil!

Håber i forstår hvad jeg mener!

/Lasse
Avatar billede bulgroz Nybegynder
02. december 2006 - 08:06 #1
Det smarteste vil være hvis du kan finde en generisk måde hvormed du kan få fat i de collections som skal sammenlignes. Men ser man bort fra dette kan du gøre som følgende lille eksempel.

eksemplet sammenligner blot to lister med strenge, men det kan nemt ændres til hvad du har lyst til. Med andre ord, hvis du har behov for at vide hvilket "felt" der indeholdt den specifikke værdi, må du ændre koden til at overføre selve feltet i stedet for blot værdien.

        public Form1()
        {
            InitializeComponent();

            // Lister til at indeholde værdier fra kendte felter.
            List<string> valuesA = new List<string>();
            List<string> valuesB = new List<string>();

            // Listerne fyldes med værdierne fra felterne som skal sammenlignes (her demodata)...
            valuesA.AddRange(new string[] { "A", "B", "C" });
            valuesB.AddRange(new string[] { "A", "B", "D" });

            this.UpdateValues(valuesA, valuesB);
        }

        private void UpdateValues(List<string> valuesA, List<string> valuesB)
        {
            if (valuesA.Count != valuesB.Count)
            {
                throw new ArgumentException("De to lister er ikke samme størrelse.");
            }

            int counter = 0;
            foreach (string valueA in valuesA)
            {
                string valueB = valuesB[counter];

                if (valueA != valueB)
                {
                    MessageBox.Show(string.Format("Opdatering...[{0}, {1}]", valueA, valueB));
                    // TODO: AD stuff...
                }

                counter++;
            }
        }

Men hvis du ikke har en generisk metode til at få fat i dine collections, så vinder du ikke så meget. Du kan som alternativ blot pakke dit AD stuff i en separat metode som checker værdierne parvis og opdaterer hvis nødvendigt. Denne må du så naturligvis kalde 20 gange (20 linier kode) men det vil være mere indlysende hvilke værdie som sammenlignes.
Avatar billede lasserasch Juniormester
02. december 2006 - 12:41 #2
Hejsa.

Ja, tænkte jeg nok! Nogen gange kan man bare ikke slippe uden om lange kodestykker. Desværre...

På mig virker det bare lidt dumt at skulle kalde en funktion 20 gange lige efter hinanden. Nå, men jeg siger tak for svaret! Du får selvfølgelig points...

Send et svar.

/Lasse
Avatar billede bulgroz Nybegynder
02. december 2006 - 14:29 #3
Ved at kalde én og samme metode 20 gange, gør du din kode mere gennemskuelig, for hvis du splitter op i to lister som først assignes med hver deres værdisæt, kan du let komme til at bytte om på rækkefølgen og det kan let være svært at opdage i koden.
Avatar billede md_craig Nybegynder
03. december 2006 - 16:05 #4
Nu skal du ikke nødvendigvis give for let op...

Du må tilgå dine data på en måde, enten ved keys aller anden måde... og så ville du måske kunne komme let omkring ved det alligevel...

måske ville noget ala:

if ( array1[AD_Email] != array2[SQL_ARYMTX])
{
foretag AD ændring
}

I sidste ender kommer der meget an på hvordan de resterende ting ser ud... jeg ser ikke noget problem i at lave noget som synkronizerer to databaser som samtiding kan scaleres dynamisk...

Det kan så være det i længen igen bliver 20 linier kode... men det er 20 linier kode til 20 check, til 100 check eller til 1.000.000 check... altså den mængde at data tabeller osv du synkroniserer kan scaleres efter behov uden at kode flere linier...
Avatar billede lasserasch Juniormester
03. december 2006 - 20:59 #5
Ja, md_craig. Det var noget ala det du foreslår, som jeg ledte efter. Prøver lige at lege lidt med det i morgen, og så venter jeg lige tilbage igen ik!
Avatar billede lasserasch Juniormester
02. oktober 2007 - 11:31 #6
Ked af den lange respons tid fra min side. Hermed uddeling af points!

/Lasse
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester