14. december 2004 - 18:58Der 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!!!!!
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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.
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....
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");
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)
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.
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.
>> 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...
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).
naa, jeg lukker spg, selvom der aldrig rigtig er kommet et endeligt svar.
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.