Fujitsu-Siemens
 
M A G A Z I N
 
PROGRAMIRANJE 
  Boris Bjelošević

ASP.NET = brže i lakše

U novembarskom broju našeg najomiljenijeg e-magazina smo pokazali kako se iz Access-ove baze Northwind, odnosno njene tabele Customers, mogu prikazati podaci na web-u. Da je kojim slučajem u prvoj liniji kóda umesto
<% strProvider = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\Inetpub\wwwroot\tutor\northwind.mdb"
stajalo
<% strProvider = "Driver={SQL Server}; Server=DADILJA; DataBase=Northwind; UID=sa; PWD=;"
I kompletan ostatak kóda ostao netaknut, na web-u bismo dobili podatke izvučene iz baze Northiwind, tabele Customers, ali ovoga puta locirane na SQL-serveru koji se zove Dadilja. Sadržaj promenljive strProvider ne treba posebno objašnjavati. Valja samo napomenuti da, za razliku od prikazanog, prilikom instaliranja samog SQL-servera nije poželjno ostaviti korisničko ime administratora (username sa) bez šifre; izabranu šifru tada treba upisati odmah iza dela PWD= u promenljivoj strProvider.
Na manje ili više ozbiljnim SQL-serverima, gde se podaci unose na različite načine, obično se napravi jedan virtuelni korisnik sa svojom šifrom i svojim pravima pristupa (dodavanje, izmena i/ili brisanje podataka) koji se koristi samo za ASP-pristup bazi. U tom slučaju se ne koristi korisničko ime administratora baze, kao u gornjem primeru.
Html-kód same stranice je napravio ASP na osnovu podataka dobijenih iz baze podataka i html-kóda koji smo uneli ručno, a možemo ga videti u browser-u preko komande View Source.
Sada kad nam je poznat web-način prikazivanja podataka iz Access-a, odnosno SQL Server-a korišćenjem tehnologije ASP-a, pogledajmo kako se isti proces može uraditi korišćenjem Microsoft-ove tehnologije .NET.
Konkretan primer
Objašnjenja strukture i ideje samo .NET-a ćemo ostaviti za neki drugi broj ovog magazina. Ovde ćemo samo napomenuti da je za korišćenje prikazanih primera potrebno imati instaliran .NET Framework na web-serveru. Njegovu instalaciju možemo naći na Microsoft-ovom sajtu i „teška“ je oko 20MB.
Kód koji sledi ćemo detaljno objasniti, ali ga pre toga treba snimiti u fajl pod imenom default.aspx.

1. <%@ Import Namespace="System.Data" %>
2. <%@ Import Namespace="System.Data.SqlClient" %>
3. <html>
4. <head>
5. <title>ASP.NET u prkasi</title>
6. <script language="VB" runat="server">
7. Sub Page_Load(sender As Object, e As EventArgs)
8. Dim myConn As SqlConnection
9. Dim myComm As SqlDataAdapter
10. Dim ds As DataSet
11. myConn = New SqlConnection("server=DADILJA; DataBase=Northwind; UID=sa; PWD=;")
12. myComm = New SqlDataAdapter("SELECT * FROM Customers", myConn)
13. ds = New DataSet()
14. myComm.Fill(ds)
15. MyDataList.DataSource = ds
16. MyDataList.DataBind()
17. End Sub
18. </script>
19. </head>
20. <body>
21. <asp:DataList id="MyDataList" RepeatColumns="2"
22. RepeatDirection="Horizontal" runat="server">
23. <ItemTemplate>
24. <div style="padding:15,15,15,15;font-size:10pt;font-family:Verdana">
25. <div style="font:12pt verdana;color:darkred">
26. <b><i><%# DataBinder.Eval(Container.DataItem, "CompanyName")%></i></b>
27. </div>
28. <br>
29. <b>Customer ID:</b>
30. <%# DataBinder.Eval(Container.DataItem, "CustomerID") %><br>
31. <b>Contact Name:</b>
32. <%# DataBinder.Eval(Container.DataItem, "ContactName") %>, <%# DataBinder.Eval(Container.DataItem, "ContactTitle")%><br>
33. <b>Address:</b>
34. <%# DataBinder.Eval(Container.DataItem, "Address") %><br>
35. <b>City:</b>
36. <%# DataBinder.Eval(Container.DataItem, "City") %>
37. </div>
38. </ItemTemplate>
39. </asp:DataList>
40. </body>
41. </html>

I ovde smo koristili SQL-server pod imenom Dadilja, bazu Northwind i tabelu Customers.
Prva dva reda našeg kóda omogućavaju da naš program koristi .NET-klase za rad sa bazama podataka (ove klase se nalaze u .NET Framework-u). Naredna tri reda su, nadamo se, već standardni i jasni za sve web-programere.
Šesti red naznačava da početak glavnog dela našeg programa. Deo runat mora da naglasi da se program izvrši na strani servera, te klijentska mašina dobija „gotov proizvod“. Deo language se u ovom slučaju može izostaviti, jer se za ASP.NET podrazumeva (default) jezik VB.NET; da smo kojim slučajem pisali program u jeziku C#, ovde bi obavezno morala da stoji naznaka da je korišćen taj jezik.
Naš program je prilično jednostavan i sadrži funkciju Page_Load, funkciju koja se izvršava čim se od servera zatraži prikazivanje samo stranice default.aspx. U njoj se odmah deklarišu lokalne promenljive: myConn (za konekciju na bazu konkretnog servera), myComm (za prosleđivanje sql-upita na bazom) i ds. Promenljiva ds ima ulogu da „preuzme“ podatke dobijene sql-upitom, što se postiže redom 14 našeg kóda. Ova promenljiva se donekle može zamisliti kao rs našeg ASP-primera, mada ima daleko više mogućnosti.
U redovima 15 i 16 sadržaj promenljive ds se prosleđuje ASP.NET kontroli DataList koju definišemo u 21. redu našeg kóda. Prilikom definisanja ove kontrole mora se navesti njeno „ime“ (kako bi se znalo kome se prosleđuju podaci iz promenljive ds) i da se sama kontrola izvršava na strani servera. Ona će, na osnovu prosleđenih joj parametara, generisati završni html-fajl; opseg ovih parametara je najviše ograničen funkcionalnošću završne stranice koja će se videti u browser-u. Naime, program nas neće ograničiti u broju kolona u kojima ćemo ispisati rezultat (u našem primeru je RepeatColumns="2"), ali će izgled stranice biti nepregledan; slično je i sa ostalim parametrima.
Od reda 23 do reda 38 se definiše izgled i pozicija gde treba prikazati podatke locirane u promenljivoj ds. Delovima kóda tipa DataBinder.Eval(Container.DataItem, "naziv_polja") se ispisuje sadržaj kolone konkretnog reda. Ovde se za svaku kolonu navodi naziv same kolone, jer su upitom (linija kóda 12) iz baze „izvučene“ sve kolone, a na samoj stranici prikazujemo samo one kojima smo konkretno napisali ime.
Napomenimo za kraj da se ovde u kódu nigde ne vrši prelazak u naredni zapis rezultata sql-upita, kao što smo imali u ASP-primeru (konkretno RS.MoveNext). Naime, greška koja je nastajala kada bi programer zaboravio da upiše komandu za prelazak u naredni zapis dovodila je do privremene blokade web-servera; da bi se to izbeglo, Microsoft u .NET-u uvodi rešenje kojim se (i) taj proces automatizuje.

 

VRH STRANE

(c) 2004 OMEGA - sva prava zadržana