16. marts 2002 - 18:20Der er
15 kommentarer og 1 løsning
OleDbDataReader -> Dataset
Hej
Er der nogen som kan beskrive hvorledes man på en enkelt måde får læst indholdet af en OleDbDataReader over i et dataset, gerne illustreret med et eksempel.
Hej Ikke for at være på tværs, men jeg tror ikke det, der er tiltænkt med en OleDbDataReader. Ifølge MSDN : "Provides a way of reading a forward-only stream of data rows from a data source"
-"From a datasource". Dvs, du skal have en datasource, før du kan bruge en reader. Og hvis du har en datasource, så er det fra DENNE, og ikke readeren, du skal lave dit dataset. Hvis du har brug for at fylde et dataset, skal du altså have en source, og så anvende en OleDbDataAdapter til at fylde datasættet (faktisk har sådan en adapter en funktion der hedder fill - meget sigende). Dermed slet ikke anvende en reader.
jeg ville nok personlig gjort det på en litt annen måte. Det er litt dobbelt arbeide å først opprette en datareader for så å legge det inn i et dataset. et dataset bygger jo ovenpå en datareader, så ....
jeg ville gjort:
OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT * FROM tabel", connectionObject ); DataSet dataSet = new DataSet(); dataAdapter.Fill( dataSet, "EtNavn" );
Mit problem er føgende : jeg modtager f.eks 12 rækker fra min datareader som den fint returnere til aspx-side hvor jeg binder resultatet MEN jeg ønsker kun at benytte de 10 af de 12 rækker. Jeg kan bare ikke finde ud af hvorledes jeg får den fjernet inden jeg returnerer for at binde.
Har lige pastet lidt af min kode for forklare hvad jeg har gang i :-)
public OleDbDataReader GetTopLinks(int topCount) {
string strDSN = ConfigurationSettings.AppSettings["LinkbasenConStr"]; string strSQL = " SELECT TOP " + topCount + " * " + " FROM BOOKMARKS " + " WHERE account_id = 30" + " ORDER BY hit desc ";
// create Objects of ADOConnection and ADOCommand OleDbConnection myConn = new OleDbConnection(strDSN); OleDbCommand myCmd = new OleDbCommand( strSQL, myConn ); OleDbDataReader result = null; OleDbDataAdapter da = new OleDbDataAdapter();
en datareader *er* den hurtigste måte å lese på, og hvis du kun skal lese fra databasen og skrive resultater ut, så er det jo ingen hensikt å benytte noe annet...
men når jeg kikker på din seneste posting, så sender du jo med hvor mange du skal vise (topCount)...vil ikke dette parameter bestemme hvor mange records du skriver ut ?
som reffak påpekte, så kan du ikke fjerne rekker i en DataReader. Dette er en 'forward-only' stream som ikke kan manipuleres. hvis du ikke kan få din SQL til kun å returnere 10 rekker, så skal du gjøre som jeg foreslo i min posting @ 16/03-2002 18:56:58
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.