Avatar billede Lasse Novice
14. december 2004 - 18:58 Der er 8 kommentarer og
1 løsning

Er et dataset smart her?

Jeg er GROEN mht. dataset.

Jeg har 2 tabeller projekter og filer. Der er etableret en een - mange relation mellem disse (i hvert projekt findes der mange filer).

Hver fil skal processeres og derefter skal de markeres som processeret.

Derfor skal jeg nu hente x antal fil raekker ud fra databasen, som endnu ikke er blevet processeret (og som har nogle specielle projekt specifikationer). Jeg skal ogsaa hente deres tilhoerende projekt idet projektet beskriver HVAD der skal goeres ved filerne.

Hvordan laver jeg dette smartest? Er det smart at bruge et dataset her? Kan man med een Fill saetning hente ud i flere tabeller? Hjaaaeeeelp!!!!!
Avatar billede segato Nybegynder
21. december 2004 - 18:14 #1
Meget svært helt at forstå hvad du vil. Men et dataset kan jo indeholde mange tabeller. Set et dataset som en databse i hukommelsen med en masse tabeller. Men generelt er dataset smarte til det meste.
Avatar billede Lasse Novice
21. december 2004 - 18:42 #2
Ja, det kan nok bruges til alt, men er det SMART til alt?

Lad os antage at jeg har 2 tabeller (tabel "lærere" og tabel "elever") der er relateret (en lærer kan have mange elever). Jeg skal nu hente en elev ud samt hans relateret lærer. I begge tabeller er der 100000+ raekker, men jeg skal egentlig kun bruge en raekke fra hver af tabellerne.

Til at starte med ved jeg IKKE hvilken elev jeg skal have ud, men det ved en SP (udfra en algoritme) som jeg kalder. Eleven jeg henter ud vaelges udfra et filter der siger... hent kun elever ud der har en laerer som underviser f.eks. i spansk.

Opsumering:

1) Kald SP og faa elev ud.
2) Hent laerer baseret paa den elev jeg lige har hentet ud.

Hvordan bruger man datasets til dette? Jeg formoder at jeg skal uddrive det via 2 queries, ik' sandt? Dvs. at jeg i den foerste query henter en elev ud men denne query baseres ogsaa paa laererne. I query nummer 2 henter jeg IGEN den samme laerer ud som jeg lige har hentet i forrige query. Det er jo dobbelt arbejde, og jeg haaber at det kan minimeres....
Avatar billede segato Nybegynder
21. december 2004 - 19:47 #3
Ja i dette tilfælde er det smart. Man kan hente data flere måder. De typiske måder er følgende:

scalar
reader
dataset/typed dataset

En scalar er kun hvis man skal hente en værdi. Så det er ikke noget du kan bruge. Readeren er kun til at læse direkte fra databasen der er ikke rigtig en direkte bindning. Så er der datasetet som henter data ud og holder det i hukommelsen indtil du updatere det med databasen. Du kan kalde queries på det hente data ud, smide data ind osv. Så til din løsning vil jeg sige datasettet er den eneste fornuftige løsning da du har flere tabeller du vil arbejde med på en gang. Nedenstående er en måde du kan gøre det på, det er standard måden. Du kan gøre nøjagtig det samme med en line hvis du bruger microsoft data application block.

//Set the connection string for the database
            string connectionstring="Initial Catalog=NorthWind; Data Source=buildees;user id=sa;password=BaanIT00;";

            //Create Connection and open it
            System.Data.SqlClient.SqlConnection  conn = new SqlConnection(connectionstring);
            conn.Open ();

            //Create the command object
            SqlCommand comm = new SqlCommand();
            comm.Connection = conn;
            comm.CommandText = "Select employeeid, lastname, firstname, city from Employees";


            //Create an adapter object
            SqlDataAdapter adapter = new SqlDataAdapter("Select employeeid, lastname, firstname, city from Employees", connectionstring);
       
            //Create a dataset object and fill the values from Employees table   
            DataSet oDataSet = new DataSet();
            adapter.Fill(oDataSet, "Employees");
Avatar billede segato Nybegynder
21. december 2004 - 19:51 #4
Well fik ik læst dit svar ordenligt. Hvis du kun skal læse fra databasen ville jeg nok bruger en SqlDataReader. Du skal tænke på en reader kan kun læse og ik opdatere tabellen igen. Et dataset holder data og smider man data ind kan man senerehen opdatere sine data med de nye data på selve databsen. Tigengæld er datareaderen meget hurtigere og lettere.

Så ville jeg lave en sql der joiner de to tabeller. Enten via et join eller via en subselect og bruge en reader.

f.eks.

select * from tabel1 where id=(select * from tabel2 where id=2)
Avatar billede Lasse Novice
21. december 2004 - 20:20 #5
Ja, det var ogsaa det som jeg forventede (reader er smartere i mit tilfaelde).

Udfra det jeg kender syntes jeg faktisk ikke at datasettet er smart i mange tilfaelde. Som jeg forstaar saa SKAL man hente hver tabel ud i seperat query. I tilfaelde af at man skal hente udfra 2 tabeller med relation, saa kommer der dobbeltarbejde paa serveren (se tidligere forklaring). Man kan selvfoelgelig hente alt ud, men det er jo ogsaa et kaempe overhead.
Avatar billede segato Nybegynder
21. december 2004 - 20:24 #6
DataSets er super smarte til nogle ting og andre mindre smarte. Der er nogle som aldrig bruger andet grundet programmerings modeller. F.eks. en hjemme side hvor du ikke vil presse databasen kan du ligge dine data i et dataset og så kun opdatere det hver 10 minut f.eks. Det er en måde at holde data på i hukommelsnen. Man kan ik rigtigt sige der re dobbelt arbejde med et dataset frem for en reader. Samme sql der skal til. Men et dataset er lidt sværrere at arbejde med og det er ik helt så hurtigt. til gengæld er dere flere muligheder i det. men det kommer lidt an på hvad man vil.
Avatar billede Lasse Novice
22. december 2004 - 17:54 #7
>> Man kan ik rigtigt sige der re dobbelt arbejde med et dataset frem for en reader. Samme sql der skal til.

Det mener jeg ikke. Hvordan vil du populere et dataset der har 2 tabeller som er relateret? Efter min forstaaelse, saa skal det ske via to queries, istedet for en, eller er det mig der er forkert paa den? Det kan da ikke vaere andet end langsommere...
Avatar billede segato Nybegynder
26. december 2004 - 18:44 #8
Man kan en ting i et dataset som man ik kan i en reader, have flere tabeller. Det er rigtigt. Men om du joiner to tabeller ned til en tabel i et dataset eller du gør det i en datareader. Det er da det samme set fra mit synspunkt. Hvis du har en tabel med lærere og en med elever som du joiner via join, unioen eller subselect i din sql. Om du putter resultatet i et dataset eller en reader giver det samme stykke arbejde som jeg ser det men med et forskelligt resultat? Du eksekvere jo den samme sql på databasen. Når man står mellem valget af et dataset eller en reader er der andre ting man skal tage højde for. Vil man kun vise data(reader vil tit være fortrukken her)? Vil man behandle de data man lige har hentet for herefter at opdatere databasen(dette kan en reader ikke).
Avatar billede Lasse Novice
26. januar 2005 - 22:27 #9
naa, jeg lukker spg, selvom der aldrig rigtig er kommet et endeligt svar.
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