Avatar billede ylwen Nybegynder
29. oktober 2008 - 07:52 Der er 8 kommentarer og
1 løsning

DB Svar udbedes

Jeg kunne godt tænke mig en gennemgang af de forskellige metoder der er til at hente data fra en MSSQL database (Ja, det er vel lige meget hvad db det er). Jeg må ærligt indrømme at jeg aldrig rigtig har fået forståelsen af metodernes brug.

Hvornår bruger man dataset, datatable osv.

Hvilken metode er f.eks. bedst når man skal hente alle data fra db og vise dem i et gridview.

Hvad er smartest hvis man kun skal hente én post og vise den i tekstbokse?

osv.

Skal man bruge specielle metoder hvis man henter data til gv og skal kunne sortere og indexere?

Lidt eksempler og forklaringer på de forskellige metoder vil være rart.
Avatar billede arne_v Ekspert
29. oktober 2008 - 15:20 #1
Det vil vaere ret omfattende at gennemgaa alle maader i detaljer. Men jeg kan da starte
med at liste dem.

.NET 1.x:

DataSet = alle data loades til memory i en struktur bestaaende af en eller flere DataTable
hvor data findes i raekker og kolonner

XxxxDataReader = en stream fra databasen hvor man laese resultatet af en enkelt query
en raekke af gangen

.NET 2.0 tilfoejede:

typed DataSet = wrapper omkring DataSet som giver mere type sikker afgang

.NET 3.5 tilfoejede:

LINQ for SQL = meget primitiv ORM

.NET 3.5 SP1 tilfoejede:

entities & LINQ for entities = rigtig ORM

3. part:

forskellige ORM heriblandt NHibernate og LLBLGen
Avatar billede ylwen Nybegynder
29. oktober 2008 - 16:28 #2
OK, tak for det, men kan du fortælle mig hvor man bruger de forskellige metoder?
Hvad skal jeg vælge hvis jeg bare skal hente en enkelt post i tabellen og vise den i tekstbokse. kunne du evt. give mig et eksempel.

Hvad skal jeg bruge hvis jeg vil hente alle poster i tabellen binde dem til gridview og kunne sortere og indeksere.

Hvad er LINQ og ORM? Hvad/Hvor bruges de (til)?
Avatar billede arne_v Ekspert
29. oktober 2008 - 16:34 #3
Til at hente og vise en enkelt raekke ville jeg bruge en data reader.

Til GridView ville jeg bruge et DataSet (men du kan bruge en data reader).

LINQ - se http://en.wikipedia.org/wiki/LINQ

ORM - se http://en.wikipedia.org/wiki/Object-relational_mapping
Avatar billede ylwen Nybegynder
29. oktober 2008 - 17:16 #4
Nu har jeg prøvet at hente en enkelt post ind fra db med datareader. Det gik meget fint da der kun var en post.

sqlCmd = New SqlCommand("EXEC GetAdById @AdId=" & AdId, sqlConn)
        sqlConn.Open()
        SQLdr = sqlCmd.ExecuteReader()
        SQLdr.Read()
        TextBox1.Text = SQLdr("Subject")

Men hvad nu hvis der bliver fundet flere poster. Hvordan fortæller jeg så at
str1.txt = SQLdr("Sub")post1
str2.txt = SQLdr("Sub")post2

osv.?
Avatar billede arne_v Ekspert
29. oktober 2008 - 17:28 #5
Med data reader er foelgende idiomatisk:

rdr = cmd.ExecuteReader();
while(rdr.Read())
{
    // process rdr[0], rdr[1], ...
}
rdr.Close();
Avatar billede ylwen Nybegynder
29. oktober 2008 - 17:40 #6
er det med dataset at man kan vise

str1.txt = SQLdr("Sub")post1
str2.txt = SQLdr("Sub")post2

(eller hvordan syntaxen nu er)

uden at skulle køre dem igennem løkken?
Avatar billede arne_v Ekspert
29. oktober 2008 - 17:51 #7
Med et DataSet kan du frit vaelge raekke og kolonne.
Avatar billede ylwen Nybegynder
29. oktober 2008 - 18:25 #8
Kunne du lægge et svar til mig med måden man gør det på. Så skal jeg ikke plage dig mere :)
Avatar billede arne_v Ekspert
29. oktober 2008 - 18:36 #9
foreach(DataTable dt in ds.Tables)
            {
                Console.WriteLine(dt.TableName + ":");
                foreach(DataRow dr in dt.Rows)
                {
                    foreach(object o in dr.ItemArray)
                    {
                        Console.Write(" " + o);
                    }
                    Console.WriteLine();
                }
            }

dumper et helt DataSet.

ds.Tables[tablename].Rows[rownumber][colname]

henter en enkelt vaerdi.
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
Kurser inden for grundlæggende programmering

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