07.08.2007 | Radek | | Programujeme | Žádné komentáře | 

Pracujeme s databází v ASP.NET

Pro práci s datábazemi v ASP.NET se používají funkce z knihovny ADO.NET. Kdo již programoval v klasickém ASP, jistě si pamatuje, že pro práci s databázemi byla využívána knihovna ADO. Přesto, že se může podle názvu zdát, že byla tato stará knihovna pouze přenesena do prostředí .NET, není tomu tak. Zde se totiž jedná o zcela novou knihovnu, plně využívajíci právě prostředí .NET.

Připojení k databázi

K ukládání dat v ASP.NET lze použít různá datová úložiště, ať už se jedná o pouhý soubor XML, přes databázi MS SQL Server až po např. databázový stroj Oracle. My se v našich příkladech zaměříme především na volně dostupnou databázi MS SQL Server 2005 Express.

Pokud se chceme připojit k jakékoliv databázi, budeme potřebovat tzv. připojovací řetězec. Tento připojvací řetězec se nejčastěji umisťuje do souboru s konfigurací webové aplikace web.config a to do sekce <connectionStrings>. Podívejme se, jak by takovýto připojovací řetězec vypadal při použití databáze MS SQL Server 2005 Express

<connectionStrings>
    <add name="testDB" connectionString="Data
     Source=.\SQLExpress;Integrated Security=True;
     User Instance=True;
     AttachDBFilename=|DataDirectory|testDB.mdf;
     Database=TestovaciDB1"
     providerName="System.Data.SqlClient" />
</connectionStrings>

Pro připojení k databázi se používá třídy SqlConnection, která obsahuje metodu Open(), pomocí níž právě připojení k databázi otevřeme. Pokud budete chtít otevřít připojení k databázi, můžete postupovat třeba takto:

//Připojovací řetězec načteme z web.config
SqlConnection pripojeni = new SqlConnection(ConfigurationManager.
ConnectionStrings["testDB"].ConnectionString);

//Otevřeme připojení
pripojeni.Open();

Samozřejmě nezapomeňte vždy po ukončení práce s daty v databázi připojení uzavřít pomocí metody Close() a to takto:

    pripojeni.Close();

Získání skalární hodnoty

Pokud z databáze potřebujeme zjistit pouze jednu hodnotu, je celkem zbytečné číst celou databázovou tabulku např. pomocí SQL příkazu SELECT * FROM tabulka. Pokud má takováto tabulka dejme tomu sto záznamů, nic tak strašného se neděje, ale představme si, že má tato datábázová tabulka něco kolem milionu záznamů. To bychom se na odpověď od databázového serveru asi dost načekali. V případě, že od databázového serveru požadujeme pouze jednu konkrétní hodnotu a to např. na dotaz SELECT clanek FROM magazin WHERE id=20, tj. požadujeme pouze článek z magazínu s pořadovým číslem 20, stačí tento dotaz odeslat do databáze pomocí metody ExecuteScalar(). Použití této metody si ukážeme na příkladu, kdy budeme chtít z databáze načíst práve článek s pořadovým číslem 20. Předpokladem v tomto i dalších příkladech je, že připojovací řetězec k databázi je nadefinován v souboru web.config, jak je ostatně uvedeno výše.

<%@ Page Language="C#" %>
<%@ import namespace="System.Data.SqlClient" %>
<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{
SqlConnection pripojeni = new SqlConnection(ConfigurationManager.
ConnectionStrings["testDB"].ConnectionString);
  
  try
  {
    pripojeni.Open();
    SqlCommand zjisti = new SqlCommand(
       "SELECT clanek FROM magazin WHERE id=20", pripojeni);
    vysledek.Text = zjisti.ExecuteScalar().ToString();
  }
  finally
  {
  pripojeni.Close();
  } 
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Načti článek 20</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
        <asp:Label ID="vysledek" runat="server" />
    </div>
  </form>
</body>
</html>

Vykonání akce bez návratové hodnoty

Jsou případy, kdy po databázi nepožadujeme vrátit žádné hodnoty, ale potřebujeme třeba provést příkaz INSERT, pro uložení nové hodnoty do databáze nebo upravit nějakou hodnotu v databázi pomocí příkatu UPDATE, popřípadě něco smazat příkazem DELETE. V takovémto případě se používá metoda ExecuteNonQuery(), pomocí které některý z výše uvedených příkazů spustíme.

<%@ Page Language="C#" %>
<%@ import namespace="System.Data.SqlClient" %>

<script runat="server">

protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection pripojeni = new SqlConnection(ConfigurationManager.
ConnectionStrings["testDB"].ConnectionString);
  
  try
  {
    pripojeni.Open();
    SqlCommand odstran = new SqlCommand(
       "DELETE  FROM magazin WHERE id=20", pripojeni);
    odstran.ExecuteNonQuery();
  }
  finally
  {
  pripojeni.Close();
  } 
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Odstraň článek</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:Button ID="odstran" runat="server" 
         OnClick="Button1_Click" Text="Odstraň článek" />
    </form>
</body>
</html>

Vrácení více záznamů

Pokud po databázi požadujeme, aby nám vrátila více záznamů než jeden, použijeme pro vykonání SQL příkazu SELECT metodu ExecuteReader(). To se hodí např. pokud po databázi chceme, aby nám vrátila názvy všechny článků od autora s id číslem 4, viz následující příklad.

<%@ Page Language="C#" %>
<%@ import namespace="System.Data.SqlClient" %>
<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{
SqlConnection pripojeni = new SqlConnection(ConfigurationManager.
ConnectionStrings["testDB"].ConnectionString);
  
  try
  {
  pripojeni.Open();
  SqlCommand clanky = new SqlCommand(
     "SELECT nazev FROM magazin WHERE autor=4", pripojeni);
  DataGrid1.DataSource = clanky.ExecuteReader();
  DataGrid1.DataBind();
  }
  finally
  {
  pripojeni.Close();
  } 
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Články od autora 4</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
        <asp:DataGrid ID="DataGrid1" runat="server" />
    </div>
  </form>
</body>
</html>

Odpovědí na tento typ dotazu bude výpis názvů všech článků, které jsou v databázi a mají v poli autor číslo 4.

Jak je na příkladech vidět, není práce s databází v ASP.NET žádná věda a dá se celkem hravě zvládnout. To, co zde bylo popsáno, samozřejmě není vše, co lze s databází v ASP.NET provádět. O dalších užitečných věcech a postupech, které lze při programování webových databázových aplikací používat si povíme v některém z dalších článků.





Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *


Novinky a oznámení

15.10.2016 - Do menu byla přidána nová sekce Stream, kde naleznete jak veškěré informace ohledně Fantomasmag TV, což jsou online streamy na Twitch.tv, tak i přímo online stream a chat.

Partnerské weby

Statistika

Naši fanoušci na Facebooku

Další...