02. december 2006 - 02:52Der 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 )
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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.
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...
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.
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...
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!
Ked af den lange respons tid fra min side. Hermed uddeling af points!
/Lasse
Synes godt om
Ny brugerNybegynder
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.