Dotazování na data ovládacím prvkem SqlDataSource (C#)
Scott Mitchell
V předchozích kurzech jsme použili ovládací prvek ObjectDataSource k úplnému oddělení prezentační vrstvy od vrstvy Přístupu k datům. Počínaje tímto kurzem se dozvíte, jak lze ovládací prvek SqlDataSource použít pro jednoduché aplikace, které nevyžadují tak přísné oddělení přístupu k prezentacím a datům.
Úvod
Všechny kurzy, které jsme zatím prozkoumali, používaly vrstvenou architekturu skládající se z vrstev prezentace, obchodní logiky a přístupu k datům. Vrstva přístupu k datům (DAL) byla vytvořena v prvním kurzu (Vytvoření vrstvy přístupu k datům) a vrstvě obchodní logiky v druhé (vytvoření vrstvy obchodní logiky). Počínaje kurzem Zobrazení dat Pomocí ObjectDataSource jsme viděli, jak používat ASP.NET 2.0 nového ovládacího prvku ObjectDataSource k deklarativnímu rozhraní s architekturou z prezentační vrstvy.
I když zatím všechny kurzy používaly architekturu k práci s daty, je také možné přistupovat k datům, vkládat, aktualizovat a odstraňovat data databáze přímo ze stránky ASP.NET a obejít architekturu. Tím umístíte konkrétní databázové dotazy a obchodní logiku přímo na webovou stránku. Pro dostatečně velké nebo složité aplikace je návrh, implementace a používání vrstvené architektury zásadně důležité pro úspěch, aktualizovatelnost a udržovatelnost aplikace. Vývoj robustní architektury ale může být zbytečný při vytváření mimořádně jednoduchých jednorázových aplikací.
ASP.NET 2.0 poskytuje pět integrovaných ovládacích prvků zdroje dat SqlDataSource, AccessDataSource, ObjectDataSource, XmlDataSource a SiteMapDataSource. SqlDataSource lze použít k přístupu a úpravě dat přímo z relační databáze, včetně Microsoft SQL Serveru, Microsoft Accessu, Oracle, MySQL a dalších. V tomto kurzu a dalších třech se podíváme, jak pracovat s ovládacím prvku SqlDataSource, prozkoumáme, jak dotazovat a filtrovat data databáze a jak pomocí SqlDataSource vkládat, aktualizovat a odstraňovat data.
Obrázek 1: ASP.NET 2.0 obsahuje pět integrovaných ovládacích prvků zdroje dat
Porovnání ObjectDataSource a SqlDataSource
Koncepčně platí, že ovládací prvky ObjectDataSource i SqlDataSource jsou jednoduše proxy servery pro data. Jak je popsáno v zobrazení dat pomocí ObjectDataSource kurzu, ObjectDataSource má vlastnosti, které označují typ objektu, který poskytuje data a metody k vyvolání výběru, vložení, aktualizace a odstranění dat z podkladového typu objektu. Jakmile jsou vlastnosti ObjectDataSource nakonfigurovány, může být datový webový ovládací prvek, jako je GridView, DetailsView nebo DataList, vázán na ovládací prvek, pomocí ObjectDataSource s Select()
, Insert()
, Delete()
a Update()
metody pro interakci s podkladovou architekturou.
SqlDataSource poskytuje stejné funkce, ale pracuje s relační databází, nikoli s knihovnou objektů. U sqlDataSource musíme zadat databázi připojovací řetězec a ad hoc dotazy SQL nebo uložené procedury, které se mají provést pro vložení, aktualizaci, odstranění a načtení dat. SqlDataSource s Select()
, Insert()
, Update()
a Delete()
metody, při vyvolání, připojit k zadané databázi a vydat příslušný dotaz SQL. Jak znázorňuje následující diagram, tyto metody dělají nechutnou práci při připojování k databázi, vydávání dotazu a vracení výsledků.
Obrázek 2: SqlDataSource slouží jako proxy server pro databázi
Poznámka:
V tomto kurzu se zaměříme na načítání dat z databáze. V kurzu vkládání, aktualizace a odstraňování dat pomocí ovládacího prvku SqlDataSource uvidíme, jak nakonfigurovat SqlDataSource tak, aby podporoval vkládání, aktualizace a odstraňování.
Ovládací prvky SqlDataSource a AccessDataSource
Kromě ovládacího prvku SqlDataSource obsahuje ASP.NET 2.0 také ovládací prvek AccessDataSource. Tyto dva různé ovládací prvky vedou mnoho vývojářů nové do ASP.NET 2.0 podezření, že ovládací prvek AccessDataSource je navržen tak, aby fungoval výhradně s Microsoft Accessem s ovládacím prvku SqlDataSource navrženým tak, aby fungoval výhradně s Microsoft SQL Serverem. AccessDataSource je sice navržený tak, aby fungoval speciálně s Microsoft Accessem, ale ovládací prvek SqlDataSource funguje s libovolnou relační databází, ke které lze přistupovat prostřednictvím .NET. To zahrnuje všechna úložiště dat kompatibilní s OleDb nebo ODBC, například Microsoft SQL Server, Microsoft Access, Oracle, Informix, MySQL a PostgreSQL, mimo jiné.
Jediným rozdílem mezi ovládacími prvky AccessDataSource a SqlDataSource je způsob zadání informací o připojení k databázi. Ovládací prvek AccessDataSource potřebuje pouze cestu k souboru databáze Accessu. SqlDataSource na druhé straně vyžaduje kompletní připojovací řetězec.
Krok 1: Vytvoření webových stránek SqlDataSource
Než začneme zkoumat, jak pracovat přímo s databázovými daty pomocí ovládacího prvku SqlDataSource, pojďme nejprve chvilku vytvořit ASP.NET stránky v našem projektu webu, který budeme potřebovat pro tento kurz a další tři. Začněte přidáním nové složky s názvem SqlDataSource
. Dále do této složky přidejte následující ASP.NET stránky a nezapomeňte přidružit každou stránku ke stránce předlohy Site.master
:
Default.aspx
Querying.aspx
ParameterizedQueries.aspx
InsertUpdateDelete.aspx
OptimisticConcurrency.aspx
Obrázek 3: Přidání stránek ASP.NET pro kurzy související s SqlDataSource
Stejně jako v ostatních složkách Default.aspx
se ve SqlDataSource
složce zobrazí seznam kurzů v jeho části. Vzpomeňte si, že SectionLevelTutorialListing.ascx
uživatelské řízení tuto funkci poskytuje. Proto tento uživatelský ovládací prvek přidáte Default.aspx
přetažením z Průzkumník řešení do návrhového zobrazení stránky.
Obrázek 4: Přidání SectionLevelTutorialListing.ascx
uživatelského ovládacího prvku do Default.aspx
(kliknutím zobrazíte obrázek v plné velikosti)
Nakonec přidejte tyto čtyři stránky jako položky do Web.sitemap
souboru. Konkrétně za přidání vlastních tlačítek do prvku DataList a Repeater <siteMapNode>
přidejte následující kód:
<siteMapNode url="~/SqlDataSource/Default.aspx"
title="Using the SqlDataSource Control"
description="Work directly with database data using the SqlDataSource control.">
<siteMapNode url="~/SqlDataSource/Querying.aspx" title="Retrieving Database Data"
description="Examines how to query data from a database that can then be
displayed through a data Web control."/>
<siteMapNode url="~/SqlDataSource/ParameterizedQueries.aspx"
title="Parameterized Queries"
description="Learn how to specify parameterized WHERE clauses in the
SqlDataSource's SELECT statement." />
<siteMapNode url="~/SqlDataSource/InsertUpdateDelete.aspx"
title="Inserting, Updating, and Deleting Database Data"
description="See how to configure the SqlDataSource to include INSERT, UPDATE,
and DELETE statements." />
<siteMapNode url="~/SqlDataSource/OptimisticConcurrency.aspx"
title="Using Optimistic Concurrency"
description="Explore how to augment the SqlDataSource to include support for
optimistic concurrency." />
</siteMapNode>
Po aktualizaci Web.sitemap
si chvíli prohlédněte web kurzů prostřednictvím prohlížeče. Nabídka vlevo teď obsahuje položky pro úpravy, vkládání a odstraňování kurzů.
Obrázek 5: Mapa webu teď obsahuje položky pro kurzy SqlDataSource
Krok 2: Přidání a konfigurace ovládacího prvku SqlDataSource
Začněte otevřením Querying.aspx
stránky ve SqlDataSource
složce a přepnutím do návrhového zobrazení. Přetáhněte ovládací prvek SqlDataSource ze sady nástrojů do Návrháře a nastavte jeho ID
hodnotu na ProductsDataSource
. Stejně jako u ObjectDataSource nevytváří SqlDataSource žádný vykreslený výstup, a proto se zobrazí jako šedé pole na návrhové ploše. Chcete-li konfigurovat SqlDataSource, klikněte na odkaz Konfigurovat zdroj dat z inteligentní značky SqlDataSource.
Obrázek 6: Klikněte na odkaz Konfigurovat zdroj dat z inteligentní značky SqlDataSource
Tím se zobrazí průvodce Konfigurací zdroje dat ovládací prvek SqlDataSource. I když se kroky průvodce liší od ovládacího prvku ObjectDataSource, koncový cíl je stejný, aby poskytoval podrobnosti o tom, jak načíst, vložit, aktualizovat a odstranit data prostřednictvím zdroje dat. Pro SqlDataSource to zahrnuje zadání podkladové databáze, která se má použít, a poskytnutí ad hoc příkazů SQL nebo uložených procedur.
První krok průvodce nás vyzve k zadání databáze. Rozevírací seznam obsahuje databáze nalezené ve složce webové aplikace App_Data
a databáze, které byly přidány do uzlu Datová připojení v Průzkumníku serveru. Vzhledem k tomu, že jsme již přidali připojovací řetězec pro NORTHWIND.MDF
databázi ve App_Data
složce do souboru projektuWeb.config
, obsahuje rozevírací seznam odkaz na tento připojovací řetězec. NORTHWINDConnectionString
Zvolte tuto položku z rozevíracího seznamu a klikněte na Další.
Obrázek 7: Výběr NORTHWINDConnectionString
z rozevíracího seznamu
Po výběru databáze průvodce požádá o vrácení dat dotazem. Můžeme zadat sloupce tabulky nebo zobrazení, které se mají vrátit, nebo můžete zadat vlastní příkaz SQL nebo zadat uloženou proceduru. Mezi touto volbou můžete přepínat pomocí příkazu Zadat vlastní příkaz SQL nebo uloženou proceduru a zadat sloupce z tabulky nebo zobrazení přepínačů.
Poznámka:
V tomto prvním příkladu použijeme možnost Zadat sloupce z tabulky nebo zobrazení. Později v tomto kurzu se vrátíme k průvodci a prozkoumáme možnost Zadat vlastní příkaz SQL nebo uloženou proceduru.
Obrázek 8 znázorňuje obrazovku Konfigurovat příkaz vybrat, když je vybrán přepínač Zadat sloupce z tabulky nebo zobrazení. Rozevírací seznam obsahuje sadu tabulek a zobrazení v databázi Northwind s vybranými sloupci tabulky nebo zobrazení zobrazenými v seznamu zaškrtávacích políek níže. V tomto příkladu ProductID
vrátíme sloupec , ProductName
a UnitPrice
sloupce z Products
tabulky. Jak ukazuje obrázek 8, po provedení těchto výběrů průvodce zobrazí výsledný příkaz SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]
SQL .
Obrázek 8: Vrácení dat z Products
tabulky
Jakmile průvodce nakonfigurujete tak, aby vracel ProductID
sloupce ProductName
a UnitPrice
sloupce z Products
tabulky, klikněte na tlačítko Další. Tato konečná obrazovka poskytuje příležitost prozkoumat výsledky dotazu nakonfigurovaného z předchozího kroku. Kliknutím na tlačítko Test Query spustíte nakonfigurovaný SELECT
příkaz a zobrazíte výsledky v mřížce.
Obrázek 9: Kliknutím na tlačítko Testovací dotaz zkontrolujte svůj SELECT
dotaz
Průvodce dokončíte kliknutím na tlačítko Dokončit.
Stejně jako u ObjectDataSource průvodce SqlDataSource pouze přiřadí hodnoty k vlastnostem ovládacího prvku, konkrétně vlastnosti ConnectionString
a SelectCommand
vlastnosti. Po dokončení průvodce by deklarativní kód ovládacího prvku SqlDataSource měl vypadat přibližně takto:
<asp:SqlDataSource ID="ProductsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]">
</asp:SqlDataSource>
Tato ConnectionString
vlastnost poskytuje informace o tom, jak se připojit k databázi. Tato vlastnost může být přiřazena úplná pevně zakódovaná hodnota připojovací řetězec nebo může odkazovat na připojovací řetězec v Web.config
. Chcete-li odkazovat na hodnotu připojovací řetězec v souboru Web.config, použijte syntaxi <%$ expressionPrefix:expressionValue %>
. VýrazPrefix je obvykle ConnectionStrings a expressionValue je název připojovacího řetězce v oddílu Web.config
<connectionStrings>
. Syntaxi lze však použít k odkazování na <appSettings>
prvky nebo obsah ze souborů prostředků. Další informace o této syntaxi najdete v tématu ASP.NET Expressions – přehled .
Vlastnost SelectCommand
určuje příkaz SQL ad hoc nebo uloženou proceduru, která se má provést pro vrácení dat.
Krok 3: Přidání datového webového ovládacího prvku a jeho vytvoření vazby na SqlDataSource
Jakmile je sqlDataSource nakonfigurován, může být vázán na datový webový ovládací prvek, jako je GridView nebo DetailsView. Pro účely tohoto kurzu pojďme zobrazit data v objektu GridView. Z panelu nástrojů přetáhněte objekt GridView na stránku a vytvořte vazbu na ProductsDataSource
Zdroj dat SqlDataSource výběrem zdroje dat z rozevíracího seznamu v inteligentní značce GridView s.
Obrázek 10: Přidání objektu GridView a jeho vytvoření vazby k ovládacímu prvku SqlDataSource (kliknutím zobrazíte obrázek s plnou velikostí)
Jakmile vyberete ovládací prvek SqlDataSource z rozevíracího seznamu v inteligentní značce GridView s, Visual Studio automaticky přidá BoundField nebo CheckBoxField do GridView pro každý ze sloupců vrácených ovládacím prvek zdroje dat. Vzhledem k tomu, SqlDataSource vrátí tři databázové sloupce ProductID
, ProductName
a UnitPrice
existují tři pole v GridView.
Chvilku nakonfigurujte GridView se třemi BoundFields. ProductName
Změňte vlastnost pole HeaderText
na Název produktu a UnitPrice
pole s na Cenu. Také naformátujte UnitPrice
pole jako měnu. Po provedení těchto úprav by deklarativní kód GridView měl vypadat přibližně takto:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ProductsDataSource"
EnableViewState="False">
<Columns>
<asp:BoundField DataField="ProductID" HeaderText="ProductID"
InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
<asp:BoundField DataField="ProductName" HeaderText="Product Name"
SortExpression="ProductName" />
<asp:BoundField DataField="UnitPrice" HeaderText="Price"
SortExpression="UnitPrice" DataFormatString="{0:c}"
HtmlEncode="False" />
</Columns>
</asp:GridView>
Navštivte tuto stránku v prohlížeči. Jak ukazuje obrázek 11, GridView zobrazí seznam jednotlivých produktů ProductID
, ProductName
a UnitPrice
hodnot.
Obrázek 11: Objekt GridView zobrazí jednotlivé produkty ProductID
ProductName
a UnitPrice
hodnoty (kliknutím zobrazíte obrázek v plné velikosti).
Když je stránka navštívena GridView vyvolá jeho metodu Select()
správy zdrojů dat. Když jsme používali objectDataSource ovládací prvek, který se nazývá ProductsBLL
metoda třídy s GetProducts()
. S SqlDataSource však Select()
metoda vytvoří připojení k zadané databázi a vydá (SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]
v tomto příkladu SelectCommand
). SqlDataSource vrátí své výsledky, které GridView pak vytvoří výčet a vytvoří řádek v GridView pro každý vrácený záznam databáze.
Integrované funkce webového ovládacího prvku data a ovládací prvek SqlDataSource
Obecně platí, že funkce, které jsou součástí stránkování, řazení, úpravy, odstraňování, vkládání atd., jsou specifické pro ovládací prvek web dat a nejsou závislé na použitém ovládacím prvku zdroje dat. To znamená, že GridView může využívat integrované stránkování, řazení, úpravy a odstraňování, zda je vázán na ObjectDataSource nebo SqlDataSource. Některé funkce webového ovládacího prvku dat jsou ale citlivé na ovládací prvek zdroje dat, který se používá, nebo na konfiguraci správy zdrojů dat.
Například v kurzu Efektivní stránkování prostřednictvím velkých objemů dat jsme probrali, jak ve výchozím nastavení logika stránkování pro datové webové ovládací prvky naively vrátí všechny záznamy z podkladového zdroje dat a pak zobrazí pouze příslušnou podmnožinu záznamů s aktuálním indexem stránky a počet záznamů, které se mají zobrazit na stránce. Tento model je velmi neefektivní při stránkování prostřednictvím dostatečně velkých sad výsledků. Objekt ObjectDataSource lze naštěstí nakonfigurovat tak, aby podporoval vlastní stránkování, které vrací pouze přesnou podmnožinu záznamů, které se mají zobrazit. Ovládací prvek SqlDataSource však nemá vlastnosti pro implementaci vlastního stránkování.
Další jemnost stránkování a řazení vyvstává s SqlDataSource. Ve výchozím nastavení mohou být data vrácená z SqlDataSource stránkována nebo seřazena prostřednictvím Objektu GridView. Pokud to chcete předvést, zkontrolujte v inteligentní značce Querying.aspx
GridView možnosti Povolit stránkování a Povolit řazení a ověřte, že to funguje podle očekávání.
Řazení a stránkování funguje, protože SqlDataSource načte data databáze do volně typované datové sady. Celkový počet záznamů vrácených dotazem základní aspekt implementace stránkování lze zjistit z datové sady. Kromě toho je možné výsledky datové sady řadit pomocí DataView. Tyto funkce sqlDataSource automaticky používají při stránkování nebo seřazených dat gridview.
SqlDataSource lze nakonfigurovat tak, aby vrátil DataReader místo DataSet změnou jeho DataSourceMode
vlastnosti z DataSet
(výchozí) na DataReader
. Použití třídy DataReader může být upřednostňované v situacích, kdy předáte výsledky SqlDataSource do existujícího kódu, který očekává DataReader. Vzhledem k tomu, že objekty DataReader jsou výrazně jednodušší než Datové sady, nabízejí lepší výkon. Pokud však provedete tuto změnu, ovládací prvek Data Web nemůže řadit ani stránku, protože SqlDataSource nemůže zjistit, kolik záznamů vrátí dotaz, ani dataReader nenabízí žádné techniky pro řazení vrácených dat.
Krok 4: Použití vlastního příkazu SQL nebo uložené procedury
Při konfiguraci ovládacího prvku SqlDataSource lze dotaz použitý k vrácení dat zadat v jednom ze dvou přístupů jako vlastní příkaz SQL nebo uloženou proceduru nebo jako sloupce z existující tabulky nebo zobrazení. V kroku 2 jsme prozkoumali výběr sloupců z Products
tabulky. Pojďme se podívat na použití vlastního příkazu SQL.
Přidejte na Querying.aspx
stránku další ovládací prvek GridView a zvolte, že chcete vytvořit nový zdroj dat z rozevíracího seznamu v inteligentní značce. Dále naznačte, že data budou načítaná z databáze, tím se vytvoří nový ovládací prvek SqlDataSource. Pojmenujte ovládací prvek ProductsWithCategoryInfoDataSource
.
Obrázek 12: Vytvoření nového ovládacího prvku SqlDataSource s názvem ProductsWithCategoryInfoDataSource
Na další obrazovce se nás zeptáme, abychom zadali databázi. Jak jsme to udělali na obrázku 7, vyberte NORTHWINDConnectionString
z rozevíracího seznamu a klikněte na Další. Na obrazovce Konfigurovat příkaz Select zvolte přepínač Zadat vlastní příkaz SQL nebo uloženou proceduru a klepněte na tlačítko Další. Tím se zobrazí obrazovka Definovat vlastní příkazy nebo Uložené procedury, která nabízí karty s popisky SELECT, UPDATE, INSERT a DELETE. Na každé kartě můžete do textového pole zadat vlastní příkaz SQL nebo zvolit uloženou proceduru z rozevíracího seznamu. V tomto kurzu se podíváme na zadání vlastního příkazu SQL; Další kurz obsahuje příklad, který používá uloženou proceduru.
Obrázek 13: Zadání vlastního příkazu SQL nebo výběr uložené procedury
Vlastní příkaz SQL můžete zadat ručně do textového pole nebo ho můžete vytvořit graficky kliknutím na tlačítko Tvůrce dotazů. Z Tvůrce dotazů nebo textového pole použijte následující dotaz k vrácení ProductID
polí z Products
ProductName
tabulky pomocí příkazu JOIN
k načtení produktů CategoryName
z Categories
tabulky:
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Categories
INNER JOIN Products ON
Categories.CategoryID = Products.CategoryID
Obrázek 14: Dotaz můžete graficky sestavit pomocí Tvůrce dotazů
Po zadání dotazu pokračujte kliknutím na tlačítko Další na obrazovku Test Query . Kliknutím na tlačítko Dokončit dokončete průvodce SqlDataSource.
Po dokončení průvodce bude GridView mít tři BoundFields přidány do něj zobrazující ProductID
, ProductName
a CategoryName
sloupce vrácené z dotazu a výsledek následující deklarativní kód:
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ProductsWithCategoryInfoDataSource"
EnableViewState="False">
<Columns>
<asp:BoundField DataField="ProductID" HeaderText="ProductID"
InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
<asp:BoundField DataField="ProductName" HeaderText="ProductName"
SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="CategoryName"
SortExpression="CategoryName" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="ProductsWithCategoryInfoDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
SelectCommand="
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Categories
INNER JOIN Products ON Categories.CategoryID = Products.CategoryID">
</asp:SqlDataSource>
Obrázek 15: GridView zobrazuje každé ID produktu, název a přidružený název kategorie (kliknutím zobrazíte obrázek s plnou velikostí).
Shrnutí
V tomto kurzu jsme viděli, jak dotazovat a zobrazit data pomocí ovládacího prvku SqlDataSource. Stejně jako ObjectDataSource slouží SqlDataSource jako proxy a poskytuje deklarativní přístup k přístupu k datům. Jeho vlastnosti určují databázi, ke které se má připojit, a dotaz SQLSELECT
, který se má provést. Dají se zadat prostřednictvím okno Vlastnosti nebo pomocí průvodce Konfigurovat zdroj dat.
Příklady SELECT
dotazů, které jsme prozkoumali v tomto kurzu, vrátily všechny záznamy ze zadaného dotazu. Ovládací prvek SqlDataSource však může obsahovat WHERE
klauzuli s parametry, jejichž hodnoty jsou přiřazeny programově nebo se automaticky načítají ze zadaného zdroje. V dalším kurzu se podíváme, jak vytvářet a používat parametrizované dotazy.
Šťastné programování!
Další čtení
Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací:
- Přehled ovládacího prvku SqlDataSource
- kurzy k rychlému startu pro ASP.NET: Ovládací prvek SqlDataSource
- The Web.config
<connectionStrings>
Element - Referenční informace k připojovacímu řetězci databáze
O autorovi
Scott Mitchell, autor sedmi knih ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, trenér a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 za 24 hodin. Je dostupný na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím svého blogu, který lze najít na http://ScottOnWriting.NET.
Zvláštní díky
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Vedoucí recenzenti tohoto kurzu byli Susan Connery, Bernadette Leigh a David Suru. Chcete si projít nadcházející články MSDN? Pokud ano, zahoďte mi řádek na mitchell@4GuysFromRolla.com.