ASP .NET alkalmazásainkban elérhetünk adatokat a System.Data (ADO .NET) és a System.Xml namespace -ben lévő osztályokon keresztül. Ez volt a gyakorlat az ASP .NET korábbi verzióiban (2.0 előtt). Azonban az ASP .NET lehetőséget ad deklaratív adat kötésre. Ez a legtöbb esetben nem igényel sok kódolást:
- Adat kiválasztás, és megjelenítés
- Adatok rendezése, lapozása és cachelése
- Adatok szűrése futás közben megadott paraméterekkel
- Master-detail (http://en.wikipedia.org/wiki/Master-detail) megjelenítés paraméterekkel. (A master-detail olyan megjelenítési forma, ahol az adatokat valamilyen fa szerkezetben jelenítjük meg
Az ASP .NET két típusú szerver control -t bocsát a rendelkezésünkre, amelyek részt vesznek a deklaratív adat kötési modellben:
- adat forrás vezérlők (data source control)
- adat kapcsoló vezérlők (data bouind control)
Ezek a vezérlő elemek végzik el az adatok megjelenítését, frissítését az állapot nélküli webes környezetben. Ennek köszönhetően nem kell értenünk az oldalak lekérésének életciklusát, hogy adatokat jeleníthessünk meg.
Adatforrás vezérlők
Az adatforrás vezérlő feladata ASP .NET -ben az adatforráshoz való csatlakozás, adat olvasás és írás megvalósítása. Az adatforrás vezérlőknek nem feladatuk az adatok megjelenítése, közvetítőként viselkednek a valódi adatforrás és az ASP oldalak vezérlői között. Az adatforrás vezérlők a következő lehetőségeket nyújtják:
- lekérdezés
- lapozás
- szűrés
- módosítás
- törlés
- beszúrás
Az ASP .NET a következő adatforrás vezérlőket bocsátja rendelkezésünkre:
ObjectDataSource |
Bussiness objektumok, illetve egyéb osztályok kezelésére (middle-tier objects) |
SqlDataSource |
ADO .NET által kezelt adatforrások elérésére, mint pl.: MSSQL, OLE DB, ODBC vagy Oracle adatbázisok |
AccessDataSource |
Microsoft Access adatbázisok |
XmlDataSource |
XML állományok kezelésére |
SiteMapDataSource |
ASP .NET site navigation (egy nagyobb alkalmazás esetében az oldalak közötti navigáció nagyon nehezen kezelhető. ennek megkönnyítésére tartalmazza az ASP .NET a site navigation -t, melyben linkeket tudunk tárolni, majd megjeleníteni) |
Az adatforrás vezérlők (http://msdn2.microsoft.com/en-us/library/ms227679.aspx) ki is egészíthetőek, hogy más adatforrásokat is el tudjunk érni velük.
Adat megjelenítő vezérlők
Az adat megjelenítő vezérlők, nevükből kikövetkeztethetően az adatok megjelenítéséért felelősek. Ezek a vezérlők az adatforrás vezérlőkhöz csatalakozva nyernek ki adatot a tényleges adatforrásokból és megjelenítik azt a böngészőben. Ezen vezérlők az adatforrás vezérlőkhöz azok DataSourceID property -jei alapján kapcsolódnak. Az adat megjelenítésére alkalmas vezérlők listája az alábbi (http://msdn2.microsoft.com/en-us/library/ms178359.aspx) oldalon található meg.
Példák
<!-- adat megjelenítése sql adatbázisból -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html >
<head runat="server">
<title>ASP .NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataReader"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1">
</asp:GridView>
</form>
</body>
</html>
Az adatforrás, illetve adatmegjelenítés vezérlők nem minden esetben használhatóak jól. Főleg, ha valamilyen egyedi formában akarjuk az adatainkat megjeleníteni. A mintaalkalmazásunkban nem használtam a beépített lehetőségeket, mivel a célnak nem feleltek meg.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class restricted_Results : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["BDCon"].ToString()))
{
SqlCommand cmd = cn.CreateCommand();
cmd.CommandText = "SELECT * FROM eredmeny";
cn.Open();
SqlDataReader reader = cmd.ExecuteReader();
/*assemble result table*/
Table result = new Table();
result.Width = Unit.Percentage(100);
TableRow header = new TableRow();
header.BackColor = System.Drawing.Color.FromArgb(255, 133, 0);
TableCell hc1 = new TableCell();
Label hl1 = new Label();
hl1.Text = "Sorszám";
hc1.Controls.Add(hl1);
header.Controls.Add(hc1);
TableCell hc2 = new TableCell();
Label hl2 = new Label();
hl2.Text = "Név";
hc2.Controls.Add(hl2);
header.Controls.Add(hc2);
TableCell hc3 = new TableCell();
Label hl3 = new Label();
hl3.Text = "Időpont";
hc3.Controls.Add(hl3);
header.Controls.Add(hc3);
TableCell hc4 = new TableCell();
Label hl4 = new Label();
hl4.Text = "Eredmény";
hc4.Controls.Add(hl4);
header.Controls.Add(hc4);
result.Controls.Add(header);
int eo = 0;
while (reader.Read())
{
TableRow item = new TableRow();
if (eo % 2 == 0)
item.BackColor = System.Drawing.Color.FromArgb(255, 153, 51);
else
item.BackColor = System.Drawing.Color.FromArgb(255, 180, 70);
eo++;
TableCell ic1 = new TableCell();
Label il1 = new Label();
il1.Text = reader["sorszam"].ToString();
ic1.Controls.Add(il1);
item.Controls.Add(ic1);
TableCell ic2 = new TableCell();
Label il2 = new Label();
il2.Text = reader["nev"].ToString();
ic2.Controls.Add(il2);
item.Controls.Add(ic2);
TableCell ic3 = new TableCell();
Label il3 = new Label();
il3.Text = reader["idopont"].ToString();
ic3.Controls.Add(il3);
item.Controls.Add(ic3);
TableCell ic4 = new TableCell();
Label il4 = new Label();
il4.Text = reader["eredmeny"].ToString();
ic4.Controls.Add(il4);
item.Controls.Add(ic4);
result.Controls.Add(item);
}
res.Controls.Add(result);
}
}
}
Az adatokat az SqlConnection osztályon keresztül értük el. A kapcsolathoz szükséges connection stringet egy központi állományban tároljuk: web.config. A web.config sok egyéb lehetőséget kínál. Megadhatjuk, hogy az alkalmazásunk könyvtárszerkezetében mely könyvtárakban tárolt állományokhoz engedünk belépés után hozzáférést. Az alkalmazásunk két web.config fájl -t tartalmaz. Az egyik az alkalmazás gyökerében található és az egész alkalmazásra érvényes beállításokat tartalmazza, mint például a már említett connection stringet, vagy azt, hogy milyen azonosítási módot szeretnénk használni:
<?xml version="1.0"?>
<!--
Note: As an alternative to hand editing this file you can use the
web admin tool to configure settings for your application. Use
the Website->ASP .NET Configuration option in Visual Studio.
A full list of settings and comments can be found in
machine.config.comments usually located in
\Windows\Microsoft.Net\Framework\v2.x\Config
-->
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings/>
<connectionStrings>
<add name="BDCon"
connectionString="Server=vs.inf.elte.hu; Database=pubs; User Id=teszt; password=teszt; Database=vetelkedo;"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<!--
Set compilation debug="true" to insert debugging
symbols into the compiled page. Because this
affects performance, set this value to true only
during development.
-->
<authentication mode="Forms" />
<compilation debug="true" />
<!--
The <authentication> section enables configuration
of the security authentication mode used by
ASP .NET to identify an incoming user.
-->
</system.web>
</configuration>
A második web.config a restricted könyvtárban található. Ez a fájl csak az erre a könyvtárra vonatkozó beállításokat tartalmazza.
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Most ez csupán azt tartalmazza, hogy az ebben a könyvtárban található .aspx állományhoz csak a belépett felhasználók férhetnek hozzá. Az alapértelmezett viselkedés az, hogy ha egy nem belépett felhasználó egy tiltott oldalt hív meg, akkor az ASP .NET a gyökérben lévő Login.aspx -en
keresztül próbálja meg azonosítani. Ha ez sikeres volt akkor az eredetileg meghívott oldal töltődik be. Ez a viselkedés természetesen felüldefiniálható, de ezt itt most nem részletezem.
Felmerülhet bennünk még az a kérdés, hogy mi alapján azonosít minket az alkalmazás. Ebben az alkalmazásban egy lokális MSSQL adatbázis lett megadva, mint membership provider, ami alapvetően felhasználói adatok tárolására alkalmas szolgáltatás. Ehhez nem kell semmit se kódolnunk, csupán Visual Studio -ban el kell indítanunk az alkalmazás konfigurálása varázslót.