Az ASP .NET programozási nyelv

Adatelérés

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:

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:

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:

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.