Hente og vise data fra en MS SQL-database

Tags:    asp.net

<< < 12 > >>
Hej

Jeg er begyndt at programmere lidt ASP.NET C#. Jeg kommer fra PHP, hvor jeg ellers udfører det meste af min webprogrammering.

Jeg har set en del tutorial-videoer på internettet, men jeg har stadig et problem. Jeg vil gerne hente og vise data fra en MS SQL-database.

Naturligvis kan jeg ikke ASP.NET-koden for det jeg vil, så jeg vil i stedet vise det i PHP:

Fold kodeboks ind/udPHP kode 


Jeg ved ikke hvordan dette gøres i .NET. Jeg kan godt finde ud af at vise informationen i f.eks. et GridView, men jeg har brug for at kunne gå hver række igennem og selv vælge hvordan dataene skal udskrives.



11 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Hold dig til en tre-lags struktur som dette:

MinSide.aspx
|
|
Logiklag,
MinKlasse.cs
|
|
Min Database

Det vil sige at dine objekter henter data fra databasen og ikke din side direkte


Det der er ikke en 3-lags struktur. En helt almindelig 3-lags struktur ser sådan her ud:

1. lag: Data-lag der henter og ændrer ting i din database uden nogen "logik".
2. lag: "Business"-lag / logik-lag der indeholder al din logik (fx. en klasse Users med en metode UpdateUser() hvor der bliver lavet en masse til at opdatere oplysningerne på en bruger)
3. lag: GUI-lag / præsentations-lag (det er fx. dine aspx-sider) hvor dataen trækkes fra dit logik-lag og vises til dine brugere.

Hele idéen er også at datalaget er bindeledet til databasen og at dette lag ikke kan tilgåes fra din GUI (graphical user interface). Databasen ligger uden for 3-lags strukturen.

Dermed har du en 3-lags struktur :) Men er helt enig med Brian. Hvis du ikke laver en form for arkitektur i det så kan det hurtigt blive meget grimt og det har du netop mulighederne for med ASP.Net i modsætning til PHP.

... men men men... Når du nu bruger en MS Sql database kan du jo bruge Linq to Sql til at hente dine oplysninger ud:
http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

En meget hurtig og knap så pæn løsning på det du søger vil med Linq to Sql så sådan her ud:
Fold kodeboks ind/udCSharp kode 




Indlæg senest redigeret d. 21.08.2008 09:06 af Bruger #2243
Hej Lasse.

Jeg kan godt forstå din frustration omkring ASP.NET, jeg var selv forvirret da jeg først gik igang :)

Her finder du en lille video omkring hvordan du trækker data ud af en database. Se den før du begynder at tænke på arkitektur.

http://www.asp.net/learn/videos/video-49.aspx

Spørg endelig løs hvis der opstår problemer.



Du kan også bruge en DAL-class..
Du får lige koden til den jeg bruger.

Fold kodeboks ind/udKode 


Derefter skriver du dette i din codebehind til den side du vil trække/indsætte/opdatere/slette på .
Fold kodeboks ind/udKode 


Det var bare et eksempel. Jeg benytter selv den måde og jeg synes at den er let.



Prøv at kigge på nettet efter gridview og se hvordan man bruger det. Udfordringen for dig bliver nok at man ikke laver koden i sin .php side længere, men i et seperat fil der kompileres og bruges i stedet... Nu ved jeg heller ikke om du har lavet objekter i php, men det sikkert også en udfordring for dig. Hold dig til en tre-lags struktur som dette:

MinSide.aspx
|
|
Logiklag,
MinKlasse.cs
|
|
Min Database

Det vil sige at dine objekter henter data fra databasen og ikke din side direkte



Ellers kig på msdn efter:

SqlConnection, SqlAdapter, DataSet og gridview.

Du skal altså først som Brian beskriver lave en klasse der kan håndtere querys på databasen.

Men hvis du vil have en direkte løsning : http://msdn.microsoft.com/en-us/library/fkx0cy6d.aspx





Det ville være nemmere at sørge for at det kald du laver til databasen retunerer det view som du ønsker vist. Derefter henter du det ud i en datatabel/dataset og sætter datasourcen i et gridview til det udtræk i datatable/dataset.

Altså SQLConnection, SqlCommand, SqlDataAdapter, DataTable, skal bruges til udtrækningen.



Problemet med den løsning er at der ikke er skyggen af arkitektur i det.. du har dit logik, model og præsentationslag i samme objekt... meget grimt



Jeg takker meget for jeres svar, men jeg er stadig ikke god nok til selv at tænke mig til de enkelte dele. Det er ikke for at kritisere Microsoft, men synes jeg altså at det er ALT for besværligt at gøre en simpel ting som at hente fra en database.

Så lad os antage at jeg har oprettet et standard website i Visual Web Developer 2008 Express Edition og jeg har en SQL-database i App_Data-mappen med navnet "Brugere" hvori der er 3 felter; BrugerID, Brugernavn og BrugerPassword.

Ud fra det, hvordan henter jeg så dataene ud, går igennem hver række der hentes og udskriver informationerne? Fuldstændig som i mit PHP-eksempel.

Jeg er naturligvis glad for at I fortæller hvordan det skal strukturers, men det hjælper mig bare ikke ret meget, når jeg ikke forstår/kan koden der udfører selve arbejdet.

Hvis det kan lade sig gøre må i meget gerne poste noget kode, sådan som I måske selv ville gøre. Jeg har nemlig aldrig lavet en ASP.NET-side før.

Håber I forstår :)



Indlæg senest redigeret d. 21.08.2008 18:09 af Bruger #10572
Hvorfor skulle man ikke have mulighed for at lave N-tier arkitektur i PHP ?

N-tier (x lag) har såvidt intet med ASP.NET at gøre, da ASP.NET bare er et bibliotek ovenpå .NET frameworket.

N-tier er smart, men hvis man virklig vil have noget for hånden samtidig med at man bare bygger et lille site eller applikation så er n-tier fuldstændig irrelavant.

Just my 5 cents :)





Tak for dit svar, Daniel. Har ikke haft tid til at kigge på det før nu.

Med den video forstår jeg det bedre, men dog stadig ikke så fuldstændigt som jeg gerne ville.

Så måske du kan guide mig i et konkret eksempel?

Jeg er i gang med at lave mit første program i C#, det er ikke netbaseret. I det program kunne jeg godt tænke mig at hente nogle informationer fra en database og ud til nogle input fields. Databasen hedder "Food.mdf" og felterne jeg gerne vil hente hedder "FoodID", "Name" og "Category"

Intet er sat op, hverken databaseconnection eller noget.
Hvis det er min start, kan du så konkret fortælle mig hvordan jeg gør? For det er nu bedst med et ikke-teoretisk eksempel og ud fra din signatur lader du til at være den helt rigtige at spørge :)



<< < 12 > >>
t