Avatar billede Simon Praktikant
20. oktober 2004 - 11:50 Der er 12 kommentarer og
1 løsning

tilgå xml-fil med sql

Jeg har tænkt mig at benytte en xml-fil som database, pga porterbarheden.
Hvordan selecter og interter jeg data til og fra en xml-fil med SQL med visual studio .NET?
Kodeeksempler er velkomne.
Avatar billede snepnet Nybegynder
20. oktober 2004 - 20:51 #1
hvis du læser xml-fil ind i et dataset :

DataSet ds = new DataSet();
ds.LoadXml(<path);

kan du lave selects mod tabellerne :

DataRow[] someRows = ds.Tables[0].Select(<du kan angive lidt af hvert her>);

Et konkret eksempel kunne være :

DataRow[] someRows = ds.Tables[0].Select("ID>10", "ID", DataViewRowState.CurrentRows);

var det godt nok til at starte på ?

mvh
Avatar billede Simon Praktikant
21. oktober 2004 - 17:19 #2
Tak for det.
De data jeg får ud når jeg selecter noget ligger så i someRows som er af klassen DataRow[].
Kan jeg få den lavet om til typen DataSet i steddet for?
Avatar billede snepnet Nybegynder
21. oktober 2004 - 17:21 #3
Nej ikke sådan direkte... Det er referencer til de rows der eksisterer i den tabel du har i dit dataset.
Kan du give et hint om årsagen til at du gerne vil have dem som et nyt dataset ?
(så kan det jo være at der er et alternativ).

mvh
Avatar billede Simon Praktikant
21. oktober 2004 - 17:34 #4
jeg har selv lige fundet ud af det her:
http://www.error-bank.com/microsoft.public.dotnet.languages.vb.data/2560_Thread.aspx
det gøres med denne metode
mitDataSet.Merge(mitDataRowArray);
Avatar billede Simon Praktikant
21. oktober 2004 - 17:35 #5
Jeg er ved at udvikle en application som skal arbejde med data. Som database har jeg tænkt mig at benytte en xml-fil. Jeg er interesseret i at filtrere og søge på data.
Avatar billede Simon Praktikant
21. oktober 2004 - 17:45 #6
Mht de parametre i select-metoden, er det så muligt at angive hvilke kolonner jeg vil have. Hvis nu jeg har et dataset med kolonnerne "navn", "adresse", "alder", "køn", og jeg så kun ønsker en liste med navne og adresser. Kan dette anføre inde i selelct-metoden?
Avatar billede snepnet Nybegynder
21. oktober 2004 - 18:14 #7
ok - det var nu mest hvad der var årsagen til at du gerne ville have dine rækker over i et nyt dataset jeg tænkte på.

Merge kan være lidt farlig hvis du spørger mig, men det er self. afhængig af hvordan du arbejder med data... Prøv at se nedenstående eksempel :

// lidt til at hente og gemme data
SqlConnection con = new SqlConnection(someConnString);
SqlCommand selectCommand = new SqlCommand(someSelectCommandString, con);
           
SqlDataAdapter adapter = new SqlDataAdapter(selectCommand);
SqlCommandBuilder comBuilder = new SqlCommandBuilder(adapter);

// fyld et dataset med data
DataSet ds1 = new DataSet();
adapter.Fill(ds1);

// til til andet dataset
DataSet ds2 = new DataSet();
ds2.Merge(ds1.Tables[0].Select(null, null, DataViewRowState.CurrentRows));

// lav en ændring i ds1 og opdater
ds1.Tables[0].Rows[0]["Owner"] = "DS1";
adapter.Update(ds1);

// lav en ændring i ds2 og opdater
ds2.Tables[0].Rows[0]["Owner"] = "DS2";
adapter.Update(ds2);


problemet er nu.... at i databasen er det det sidste der gælder (ds2), men i applikationen er der 2 datasets - i vid udstrækning ens, og begge med muligheden for at afstedkomme ændringer i databasen... de er bare ude af sync, hvilket kan medføre lidt ballade hvis man ikke er forsigtig.

men... det er selvfølgelig stærkt afhængigt af hvordan du bruger dine dataset i applikationen, og på hvilken måde ud opdaterer datakilden mv.
hvis bare man holder styr på tingene sker der jo ikke noget, men hvis man har noget automatisering omkring sikring af konsistens mellem database og applikationsdata, kan det virke lidt risikabelt.

men... jeg vil som nævnt rigtig gerne høre hvorfor du har brug for dem i et nyt dataset.... altså hvorfor det er nødvendigt at det er et dataset.

mvh
Avatar billede Simon Praktikant
21. oktober 2004 - 18:27 #8
jeg vil gerne have data over i dataset fordi de så kan vises i datagrid.
en anden ting er at jeg har fået fat i en komponentpakka fra Infragistics, som indeholder "ultraChart" til at tegne grafter med. Denne tager også dataset som input.
Avatar billede snepnet Nybegynder
21. oktober 2004 - 19:17 #9
Hej igen simi (har lige været væk et stykke tid).

forestillede mig også lidt af det var det det drejede sig om.... jeg synes du skal kigge lidt på DataViews istedet - det er sådan lidt mere "as intended" om du vil :

Du kan lave et DataView sådan her :

DataView dv = new DataView(someDataTable, ...); hvor ... er det samme som med Selec(...);

Så du kan gøre sådan her (for at tage samme eksempel som øverst):

DataView dv = new DataView(ds.Tables[0], "ID>10", "ID", DataViewRowState.CurrentRows);

Det kan du sagtens bruge som datasource til et dataset (og diverse infragistic-komponenter).

Hvis du bruger views istedet skal du ikke lave en kopi af dine data hver gang du udfører en select... Du har bare forskellige måder at se på de samme data.

Håber du kunne bruge det til noget.
mvh :o)
Avatar billede arne_v Ekspert
22. oktober 2004 - 21:43 #10
Jeg har smidt en helt anden type løsning her:
  http://www.eksperten.dk/spm/552147
Avatar billede Simon Praktikant
22. oktober 2004 - 21:55 #11
tak for denne løsning. Jeg oprettede spørgsmålet påny, fordi jeg regnede med at der ikke blev svaret fordi det var landet i den forkerte katagori. Mange tak for hjælpen i øvrigt. Jeg ser på det om lidt
Avatar billede Simon Praktikant
16. august 2006 - 16:06 #12
tak for kommentarerne. Smid svar for point.
Avatar billede snepnet Nybegynder
16. august 2006 - 18:09 #13
Et stk. her
Mvh
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