Variablen Positionierung in C# für Zugriff auf SQL-Datenbank
-
Ich habe folgendes Problem: Ich habe eine Mateix, bestehend aus checkboxen. Die Check-Boxen repräsentieren Fähigkeiten. Zur Laufzeit wenn eine Fähigkeit geklickt wird, geht eine Abfrage an die Datenbank die die Mitarbeiter aussucht die die ausgewählte Kompetenz besitzen!
Mein Problem ist, wie ich mein SQL-Befehl zusammenbaue wenn mehr als 1 fähigkeit ausgewählt simd?
Da ich nicht weiss wieviele Fähigkeiten geklickt werden lasse sende ich die Ids mit simikolon getrennt an den Server. Dort splite ich den string und speichere die Werte in einen ArrayList.Würde so aussehen:
ArrayList IncommingSkill = New ArrayList(); IncommingSkill[0] = 3 IncommingSkill[1] = 34 For( int = o; i < IncommingSkill t.Count; i++); { Int tmpSkill = (int)IncommingSkill[i]; SELECT A."Title" AS Title , A."Firstname" AS Firstname , A."Name" AS Name , A."Email" AS Email , A."Phone" AS Phone , A."Fax" AS Fax , A."Company" AS Company , A."City" AS City , A."Zip" AS Zip FROM "Users" A INNER JOIN "EmployeeSkills" ES ON MES.UserID = A.AxID WHERE MES.SkillID IN (5, 51) GROUP BY A."Title" AS Title , A."Firstname" AS Firstname , A."Name" AS Name , A."Email" AS Email , A."Phone" AS Phone , A."Fax" AS Fax , A."Company" AS Company , A."City" AS City , A."Zip" AS Zip HAVING count(DISTINCT ES.SkillID) = 2 }
In meinem Sql-Befehl haben die gesuchten Fähigkeiten zb die Ids 5, 51
Mit der Zzählerschleife durchlaufe ich die ArrayListAber wie representieren ich sie als Variablen? Wie hamdle ich den Sql-Befehl wenn mehr als 1 oder 2 Fähigkeiten gesucht werden?
Hat jmd eine iDee? Es wäre sehr hilfreich.
-
Wie sind denn die Daten in der DB gespeichert? Ist ein Datensatz pro Person?
Also als GRundidee würde ich folgendes machen:
Tabelle tbl_person {id vn,nn,...}
Tabelle tbl_skill { id, skill, desc } (oder so ähnlich)
Tabelle tbl_person_skill_conn { tbl_person_id, tbl_skill_id}dann nimmst du die Person id und fragst mit einem Join alle Datensätze von tbl_skill x tbl_person_skill_conn ab, die zu tb_person_id passen
jetzt ist die Frage wie du die Daten weiter verwendest. Ich würde eine Klasse Person schreiben und eine Klasse Skills. In der Klasse Person würde ich eine Liste über die Klasse Skills als Eigenschaften schreiben und dann entsprechend der Einträge in der DB diese Liste füllen.
Hoffe, es hilft Dir weiter.
GRüße Solick
-
Also ich würde es über Linq to SQL klassen machen und mir dann die Statments über Lambda ausdrücke dynamisch zusammenbasteln. Dann kannst du auf unterschiedliche Kombinationen reagieren die antreffen.Weiterhin würd ich keine ArrayList nehmen, das ist unsauber. Sondern lieber eine List<CheckBox> dann musst du nicht wild rumcasten.