36
ASP.NET Part 4 Instructor: Charles Moen CSCI/CINF 4230

ASP.NET Part 4

  • Upload
    laurie

  • View
    74

  • Download
    2

Embed Size (px)

DESCRIPTION

Instructor : Charles Moen. CSCI/CINF 4230. ASP.NET Part 4. (Continued from last week). ADO.NET. Disconnected Data Access. Fetch the data and store it in memory Steps to query the database with direct data access Create Connection and Command objects - PowerPoint PPT Presentation

Citation preview

Page 1: ASP.NET Part 4

ASP.NETPart 4

Instructor: Charles Moen

CSCI/CINF 4230

Page 2: ASP.NET Part 4

ADO.NET

(Continued from last week)

Page 3: ASP.NET Part 4

3

Disconnected Data Access

Fetch the data and store it in memory

Steps to query the database with direct data access1. Create Connection and Command objects2. Create DataSet and DataAdapter objects3. Retrieve information from the database with the DataAdapter object and add it

to the DataSet object4. Close the connection5. Interact with the data in your code

ASP.NET (MacDonald)

using System.Data;using System.Data.OleDb;using System.Web.Configuration;

In your C# code, import the correct ADO.NET namespaces

Page 4: ASP.NET Part 4

4

Deli Menu DemoASP.NET (MacDonald)

Use ASP.NET and Visual Studio 2008 to build a web application to display the results of a menu search by category using a DropDownList

Page 5: ASP.NET Part 4

5

Demo web.configASP.NET (MacDonald)

<?xml version="1.0"?><configuration>

<connectionStrings> <add name="Deli" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/db.mdb"/></connectionStrings>

<configuration>

Define the connection string in the web.config file so that it is available throughout your application

NOTE: This is a partial file.

Points to the App_Data folder inside your web application directory

The alias that you can use in your code

Page 6: ASP.NET Part 4

6

Demo Default.aspx.csASP.NET (MacDonald, Walther)

using System;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;using System.Data.OleDb;using System.Web.Configuration;

public partial class _Default : System.Web.UI.Page { private string connectionString = WebConfigurationManager.ConnectionStrings["Deli"].ConnectionString;

private DataSet ds;

Add a DataSet object The DataSet stores the data that was retrieved from the database, so it can be considered to be an in-memory database

Page 7: ASP.NET Part 4

7

Demo Page_LoadASP.NET (MacDonald)

protected void Page_Load(object sender, EventArgs e) { string selectSql = "SELECT id, category FROM Categories "; OleDbConnection conn = new OleDbConnection(connectionString); OleDbCommand cmd = new OleDbCommand(selectSql, conn); OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); ds = new DataSet(); try { conn.Open(); adapter.Fill(ds, "Categories"); } catch (Exception error) { resultsLabel.Text = "ERROR: " + error.Message; } finally { conn.Close(); } if (!IsPostBack) { foreach (DataRow row in ds.Tables["Categories"].Rows) { ListItem newItem = new ListItem(); newItem.Text = row["category"].ToString(); newItem.Value = row["id"].ToString(); categoriesDropDownList.Items.Add(newItem); } } }

Create the DataSet and DataAdapter objects

After storing the data in memory, close the connection

Retrieve the data with the DataAdapter object and fill the DataSet object with it

Then iterate through the data stored in memory to create the list

The DataAdapter is the object that is used to transfer data from the physical database to the DataSet, the “in-memory” database

Page 8: ASP.NET Part 4

8

Demo Page_LoadASP.NET (MacDonald)

protected void Page_Load(object sender, EventArgs e) { string selectSql = "SELECT id, category FROM Categories "; OleDbConnection conn = new OleDbConnection(connectionString); OleDbCommand cmd = new OleDbCommand(selectSql, conn); OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); ds = new DataSet(); try { conn.Open(); adapter.Fill(ds, "Categories"); cmd.CommandText = "select * from MenuItems"; adapter.Fill(ds, "MenuItems"); } catch (Exception error) { resultsLabel.Text = "ERROR: " + error.Message; } finally { conn.Close(); } if (!IsPostBack) { foreach (DataRow row in ds.Tables["Categories"].Rows) { ListItem newItem = new ListItem(); newItem.Text = row["category"].ToString(); newItem.Value = row["id"].ToString(); categoriesDropDownList.Items.Add(newItem); } } }

The DataSet object can hold multiple tables

What if we want to use the data from both tables on this page?

Page 9: ASP.NET Part 4

9

DemocategoriesDropDownList_SelectedIndexChanged

ASP.NET (MacDonald)

protected void categoriesDropDownList_SelectedIndexChanged(object sender, EventArgs e) { if (IsPostBack) { StringBuilder sb = new StringBuilder(); sb.Append("<table border=\"1\" cellpadding=\"5\" width=\"640px\">"); foreach (DataRow menuItemRow in ds.Tables["MenuItems"].Rows) { if (menuItemRow["category"].ToString() == categoriesDropDownList.SelectedValue) { sb.Append("<tr>"); sb.Append("<td width=\"100px\">"); sb.Append(menuItemRow["item"].ToString()); sb.Append("</td>"); sb.Append("<td>"); sb.Append(menuItemRow["description"].ToString()); sb.Append("</td>"); sb.Append("<td>"); sb.Append(menuItemRow["price"].ToString()); sb.Append("</td>"); sb.Append("</tr>"); } } sb.Append("</table>"); resultsLabel.Text = sb.ToString(); }}

An HTML table can be built by interacting with the data that is stored in memory inside the DataSet object

Page 10: ASP.NET Part 4

Data Binding

Page 11: ASP.NET Part 4

11

Data Binding

Binding a control to a data source

Single-value binding• Inserted in almost any element in the aspx file• Insert a variable, property, or expression into a page

Repeated-value binding• Works with ASP.NET list controls that support data binding• Set the control properties

DataBind()• Method of the Page class• Activates the data bindings, typically called in the Page_Load handler

ASP.NET (MacDonald)

Page 12: ASP.NET Part 4

12

Single-Value Binding

1. Insert a data binding expression into the aspx code• Could be a variable, property, or expression

2. Call DataBind() in the code

ASP.NET (MacDonald)

<%# 2 + 2 %>

<%# Request.QueryString["name"] %>

Opening and closing symbols

A data binding expression

Page 13: ASP.NET Part 4

13

Single-Value Binding ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <asp:Label ID="todayLabel" runat="server">Today is <%# DateTime.Today.ToShortDateString() %></asp:Label> </div> </form></body></html>

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { DataBind(); }}

2. Call DataBind() to see the output on the page

1. Insert a data binding expression into the aspx code

Page 14: ASP.NET Part 4

14

Some questions about single-value binding

What are some problems with single-value binding?• ANSWER: It mixes the code with the presentation layer instead of keeping it all

in one place, inside the code-behind file

What shows up on the page when you forget to call DataBind()?

What shows up on the page when the following data binding expression is used in the aspx code?

ASP.NET (MacDonald)

What would the URL look like?

<%# Request.QueryString["name"] %>

Page 15: ASP.NET Part 4

15

Repeated-Value Binding

1. Create a data object, such as an ArrayList, and fill it with data

2. Link the data object to a controlSome controls that support data binding:ListBox, DropDownList, CheckBoxList, RadioButtonList,

HtmlSelect, GridView, FormView, ListView

3. Call DataBind() in the code

ASP.NET (MacDonald)

Page 16: ASP.NET Part 4

16

Repeated-Value Binding ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <asp:Label ID="categoriesLabel" runat="server" Text="Categories: "></asp:Label> <asp:DropDownList ID="categoriesDropDownList" runat="server"> </asp:DropDownList> </div> </form></body></html>

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ArrayList categories = new ArrayList(); categories.Add("Sandwiches"); categories.Add("Salads"); categories.Add("Pasta");

categoriesDropDownList.DataSource = categories; DataBind(); }}

1. Create a data object filled with data2. Link the data object with the control

– not necessary to use a loop to add the ListItems

3. Call DataBind() to see the output on the page

Add a list control that supports data binding in the aspx code

Page 17: ASP.NET Part 4

17

Data Source Controls

We can use data source controls to interact with a database without having to write the data access code

SqlDataSource• Connect to any data source that has an ADO.NET data provider

AccessDataSource• Connect to an Access database file

ObjectDataSource XmlDataSource

• Connect to an XML file

SiteMapDataSource

ASP.NET (MacDonald)

Page 18: ASP.NET Part 4

18

Data Source Control ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div>

</div> </form></body></html>

First, add the db.mdb file to the App_Data folder in Visual Studio

Then, add the connection string to the web.config file

<?xml version="1.0"?><configuration>

<connectionStrings> <add name="Deli" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/db.mdb"/></connectionStrings>

<configuration>

Page 19: ASP.NET Part 4

19

Data Source Control ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div>

<asp:SqlDataSource ID="sourceCategories" runat="server" />

</div> </form></body></html>

Add a SqlDataSource control

Page 20: ASP.NET Part 4

20

Data Source Control ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div>

<asp:SqlDataSource ID="sourceCategories" runat="server" ProviderName="System.Data.OleDb" ConnectionString="<%$ ConnectionStrings:Deli %>" />

</div> </form></body></html>

Add the namespace for the correct provider as the value of the “ProviderName” property

Use the alias of the connection string that you created in the web.config file

To refer to a connection string in the aspx file, use this syntax

Page 21: ASP.NET Part 4

21

Data Source Control ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div>

<asp:SqlDataSource ID="sourceCategories" runat="server" ProviderName="System.Data.OleDb" ConnectionString="<%$ ConnectionStrings:Deli %>" SelectCommand="select id, category from categories" />

</div> </form></body></html>

The SQL command can be added as an inline string

The SqlDataSource control can have one each of the following commands:•SelectCommand•InsertCommand•UpdateCommand•DeleteCommand

(Although some controls do not support all operations)

Page 22: ASP.NET Part 4

22

Data Source Control ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div>

<asp:SqlDataSource ID="sourceCategories" runat="server" ProviderName="System.Data.OleDb" ConnectionString="<%$ ConnectionStrings:Deli %>" SelectCommand="select id, category from categories" /> <asp:Label ID="categoriesLabel" runat="server" Text="Categories: " />

</div> </form></body></html>

Add the label control

Page 23: ASP.NET Part 4

23

Data Source Control ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div>

<asp:SqlDataSource ID="sourceCategories" runat="server" ProviderName="System.Data.OleDb" ConnectionString="<%$ ConnectionStrings:Deli %>" SelectCommand="select id, category from categories" /> <asp:Label ID="categoriesLabel" runat="server" Text="Categories: " /> <asp:DropDownList ID="categoriesDropDownList" runat="server" DataSourceID="sourceCategories" />

</div> </form></body></html>

Add the DropDownList control

Link the data object with the control using the “DataSourceID” property

Page 24: ASP.NET Part 4

24

Data Source Control ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div>

<asp:SqlDataSource ID="sourceCategories" runat="server" ProviderName="System.Data.OleDb" ConnectionString="<%$ ConnectionStrings:Deli %>" SelectCommand="select id, category from categories" /> <asp:Label ID="categoriesLabel" runat="server" Text="Categories: " /> <asp:DropDownList ID="categoriesDropDownList" runat="server" DataSourceID="sourceCategories" DataTextField="category" DataValueField="id" />

</div> </form></body></html>

Set the “DataTextField” property and the “DataValueField” property with the values of the fields specified in the query

Page 25: ASP.NET Part 4

25

Advantages of the Data Source Controls

It was not necessary to write any C# code, such as creating the Connection, Command, and Reader objects; using try-catch-finally blocks; or using a loop to populate the list

The control could have been added and configured by using Visual Studio features such as the Design view, the Toolbox, and the Properties editor

ASP.NET (MacDonald)

Page 26: ASP.NET Part 4

26

Data Controls

Rich data controls allow you to bind an entire table of data, using a Data Source Control

• GridView

• DetailsView

• FormView

ASP.NET (MacDonald)

Page 27: ASP.NET Part 4

27

GridView ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div>

<asp:SqlDataSource ID="menuItemsSource" runat="server" ProviderName="System.Data.OleDb" ConnectionString="<%$ ConnectionStrings:Deli %>" SelectCommand="select * from MenuItems" />

</div> </form></body></html>

Add to your Web Site:•The db.mdb file•A connection string in web.config•A SqlDataSource control in the aspx file

Page 28: ASP.NET Part 4

28

GridView ExampleASP.NET (MacDonald)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div>

<asp:SqlDataSource ID="menuItemsSource" runat="server" ProviderName="System.Data.OleDb" ConnectionString="<%$ ConnectionStrings:Deli %>" SelectCommand="select * from MenuItems" />

<asp:GridView ID="GridView1" runat="server" DataSourceID="menuItemsSource" />

</div> </form></body></html>

Add the GridView control

Bind it to the SqlDataSource

Page 29: ASP.NET Part 4

29

GridView ExampleASP.NET (MacDonald)

Change the GridView control in the Design view•Auto Format...•Edit Columns...•Add New Column...•Enable Paging•Enable Sorting

Page 30: ASP.NET Part 4

Master Pages

Page 31: ASP.NET Part 4

31

Master Pages

Used to define the layout of multiple pages in your web site

• Page templates are used to define features such as headers, footers, navigation panels

• Use the .master file extension• Must be used with content pages which are inserted at the location of

the ContentPlaceHolder controls

Content pages• Inserted into the master page layout• Acquires the layout of the master page

ASP.NET (MacDonald)

Page 32: ASP.NET Part 4

32

Master Page ExampleASP.NET (MacDonald)

To add a master page:1. In the “Website” menu, select “Add New Item”2. Select “Master Page”

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder></head><body> <form id="form1" runat="server"> <div> <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </form></body></html>

The master directive identifies the master page

Content pages go into the ContentPlaceHolder

Page 33: ASP.NET Part 4

33

Master Page ExampleASP.NET (MacDonald)

• Add elements to the master page outside of the ContentPlaceHolder

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> <style type="text/css"> .banner { font-family: Arial, Helvetica, sans-serif; background-color: #800000; color: #FFFFFF; font-weight: bold; padding: 5px; } </style></head><body> <form id="form1" runat="server"> <div> <h1 class="banner">Garden Fresh Sandwich Deli</h1> <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </form></body></html>

Page 34: ASP.NET Part 4

34

Master Page ExampleASP.NET (MacDonald)

To add a content page:1. In the “Website” menu, select “Add New Item”2. Select “Web Form”3. Check “Select master page” in the dialog

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

</asp:Content>

The page directive connects it to the master page

The Content element with the “head” id should contain styles or scripts that are specific to a particular content page

The page content should be inserted into this Content element

Page 35: ASP.NET Part 4

35

Master Page ExampleASP.NET (MacDonald)

<%@ Page Title="Home page" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem Value="1">Sandwiches</asp:ListItem> <asp:ListItem Value="2">Salads</asp:ListItem> <asp:ListItem Value="3">Pasta</asp:ListItem> </asp:DropDownList></asp:Content>

Page 36: ASP.NET Part 4

36

ReferencesMacDonald, Matthew, Beginning ASP.NET 3.5 in C# 2008: From Novice to Professional,

Second Edition. Apress, 2007.

Walther, Stephen. ASP.NET 3.5 Unleashed. SAMS, 2008.