En reader bruger du til at tage fat i hvert enkelte linje i søgresultatet i en loop. På den måde får du mulighed for selv at udføre ekstre kode for hver linje
En adapter tager det hele i et hug, og er mere beregnet som en slags rørledning fra en destination til en anden.
En DataAdapter kan bruges til at fylde et DataSet med. Et DataSet har alle raekker fra en tabel eller query i memory.
En DataReader er pegepind ned i en tabel eller query og har (logisk set) kun en enkelt raekke i memory.
Det er aabenlyst at DataReader er bedre end DataAdapter/DataSet, hvis vi snakker meget store data maengder - man vil ikke have 50 GB data i memory (kan formentlig heller ikke).
Men et DataSet er nemt at arbejde med, fordi man kan gennemtrawle data forfra, bagfra og sidelaens.
Hvis man vil have samme funktionalitet med DataReader saa laser man op i en collection af en egen klasse.
Det er meget udbredt til store "rigtige" IT projekter. Men til smaa simple loesninger er det meget arbejde sammenlignet med bare at bruge det DataSet som Microsft kan levere en uden at man skal goere noget.
Man skal passe på med, at sige DataSet's er gode til hurtige løsninger. Hvis man f.eks benytter dem sammen med et DataGrid control så er det hammer buggy!!
og det genere mig voldsomt der ikke er blevet gjort noget ved det - men kan være det er bedre i VS2008.
Hvis man skal have hurtig løsning så skal man benytte SqlDataSource som man binder op imod sine kontroller - den fungerer en del bedre og visuelt får man samme resultatet, som ved brug af et dataset, bagved er det dog anderledes:)
Et eksempel på hvordan man bruger en reader. Her udskriver jeg blot alle id'ermne til consollen:
public void GetData(string strSql) { DataSet objDS = new DataSet(); OleDbConnection objConn = new OleDbConnection(_strConnString);
objConn.Open();
OleDbCommand cmd = new OleDbCommand(strSql, objConn); OleDbDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { int id = reader.GetInt32(0); Console.WriteLine(id); }
public OleDbDataReader GetAllNyheder() { OleDbConnection objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _strDb);
OleDbCommand objDa = new OleDbCommand("SELECT * FROM tblNyheder ORDER BY fldId DESC", objConn); objConn.Open(); return objDa.ExecuteReader(); objConn.Close(); }
Det virker, men den kan ikke udføre Close(), og det er jo fordi den har returneret noget. Hvad gør man så?
Den har ikke en metode til det.. den kender kun en række af gangen:) Du kan lave en SQL og udlæse den fra din datareader - eller binde den til et datagrid eller hvad du nu har behov for og i den kalde Items.Count.
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.