Build Your Own ASP.NET 3.5 Website Using C# & VB (90 page)

Read Build Your Own ASP.NET 3.5 Website Using C# & VB Online

Authors: Cristian Darie,Zak Ruvalcaba,Wyatt Barnett

Tags: #C♯ (Computer program language), #Active server pages, #Programming Languages, #C#, #Web Page Design, #Computers, #Web site development, #internet programming, #General, #C? (Computer program language), #Internet, #Visual BASIC, #Microsoft Visual BASIC, #Application Development, #Microsoft .NET Framework

BOOK: Build Your Own ASP.NET 3.5 Website Using C# & VB
12.95Mb size Format: txt, pdf, ePub

be aware of the source of that data.

A DataSet will always contain at least one DataTable, but it can contain many.

These DataTables contain DataColumns and DataRows. If we needed to establish a

Licensed to [email protected]

Advanced Data Access

519

relationship between multiple DataTables within a DataSet, we’d use

DataRelations. Finally, we’d create DataViews to query the DataSet.

Data Tables in ADO.NET 2.0 and Later Versions

The DataTable object in ADO.NET 2.0 and later versions is more powerful than

it was in previous incarnations of the technology. It can now be used independently

of DataSets in cases where the full power of a DataSet is not required.

A DataSet
mirrors the structure of a relational database, as Figure 12.23 shows.

Figure 12.23. The structure of a DataSet, which closely resembles that of a database

You can see the parallel between the DataSet’s structure and that of a database. A

database contains tables; here, the DataSet contains DataTables. Tables in a database

have columns and rows; our DataTables have DataColumns and DataRows. When

we work in a database, we establish relationships between tables; here, we’d create

DataRelations. The major difference between DataSets and databases is that

DataSets are memory-resident, while a centralized database resides inside a database

management system.

Let’s see how we can create a DataSet within code.

Binding DataSets to Controls

Now that you have some understanding of the structure of a typical DataSet, let’s

look at the process involved in creating a DataSet in code, and binding a DataTable

Licensed to [email protected]

520

Build Your Own ASP.NET 3.5 Web Site Using C# & VB

to a control. To illustrate this example, we’ll create a simple page that displays the

Dorknozzle departments; we’ll call this page
Departments.aspx
.

Create a new web form called
Departments.aspx
, as you have for the other pages in

the Dorknozzle project. Update the generated code like this:

Dorknozzle\VB\14_Departments.aspx
(excerpt)

<%@ Page Language="VB" MasterPageFile="~/Dorknozzle.master"

AutoEventWireup="false" CodeFile="Departments.aspx.vb"

Inherits="Departments" title="
Dorknozzle Departments
" %>



ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

Dorknozzle Departments




So far, everything looks familiar. We have a blank page based on
Dorknozzle.master
,

with an empty GridView control called departmentsGrid. Our goal through the rest

of this chapter is to learn how to use the DataSet and related objects to give life to

the GridView control.

Switch to
Design
view, and double-click on an empty part of the form to generate

the Page_Load event handler. Add references to the System.Data.SqlClient

namespace (which contains the SqlDataAdapter class), and, if you’re using VB, the

System.Data namespace (which contains classes such as DataSet, DataTable, and

so on) and the System.Configuration namespace (which contains the

ConfigurationManager class, used for reading connection strings from
Web.config
).

Here’s how the code should look:

Visual Basic

Dorknozzle\VB\15_Departments.aspx.vb
(excerpt)

Imports System.Data.SqlClient

Imports System.Data

Imports System.Configuration

Partial Class Departments

Licensed to [email protected]

Advanced Data Access

521

Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object,

➥ ByVal e As System.EventArgs) Handles Me.Load


End Sub


End Class

C#

Dorknozzle\CS\15_Departments.aspx.cs
(excerpt)

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.Data.SqlClient;

public partial class Departments : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{


}


}

Next, we’ll add a method called BindGrid, which populates the GridView control

using an SqlDataAdapter and a DataSet. We’ll call BindGrid from Page_Load only

when the page is loaded for the first time. We assume that any postback events

won’t affect the data that’s to be displayed by the grid, so we populate the grid just

once, when the page loads:

Licensed to [email protected]

522

Build Your Own ASP.NET 3.5 Web Site Using C# & VB

Visual Basic

Dorknozzle\VB\15_Departments.aspx.vb
(excerpt)

Protected Sub Page_Load(ByVal sender As Object,

➥ ByVal e As System.EventArgs) Handles Me.Load

If Not Page.IsPostBack Then

BindGrid()

End If

End Sub

Private Sub BindGrid()

Dim conn As SqlConnection

Dim dataSet As New DataSet

Dim adapter As SqlDataAdapter

Dim connectionString As String = _

ConfigurationManager.ConnectionStrings( _

"Dorknozzle").ConnectionString

conn = New SqlConnection(connectionString)

adapter = New SqlDataAdapter( _

"SELECT DepartmentID, Department FROM Departments", _

conn)

adapter.Fill(dataSet, "Departments")

departmentsGrid.DataSource = dataSet

departmentsGrid.DataBind()

End Sub

C#

Dorknozzle\CS\15_Departments.aspx.cs
(excerpt)

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

BindGrid();

}

}

private void BindGrid()

{

SqlConnection conn;

DataSet dataSet = new DataSet();

SqlDataAdapter adapter;

string connectionString =

ConfigurationManager.ConnectionStrings[

"Dorknozzle"].ConnectionString;

conn = new SqlConnection(connectionString);

adapter = new SqlDataAdapter(

Licensed to [email protected]

Advanced Data Access

523

"SELECT DepartmentID, Department FROM Departments",

conn);

adapter.Fill(dataSet, "Departments");

departmentsGrid.DataSource = dataSet;

departmentsGrid.DataBind();

}

Execute the project, and browse to your Departments page. You should see a display

that’s similar to
Figure 12.24.

The grid is already styled because we have a GridView skin in place. At this point,

we’ve achieved a level of functionality that you might otherwise have reached using

SqlCommand and SqlDataReader, or the SqlDataSource; the difference is that, this

time, we’ve used an SqlDataAdapter and a DataSet.

An SqlDataAdapter object is created in much the same way as an SqlCommand object.

We simply provide it with an SQL statement and an SqlConnection object. However,

it’s the line that immediately follows the creation of the adapter that does all the

work. The Fill method of the SqlDataAdapter fills our DataSet with the data returned by the SQL query. The Fill method accepts two parameters: the first is the DataSet object that needs to be filled, the second is the name of the table that we

want to create within the DataSet.

Once the DataSet has been filled with data, it’s simply a matter of binding the

DataSet to the GridView, which we do using the same approach we’d use to bind

an SqlDataReader.

Moving on, let’s see how we can add another DataTable to our DataSet. The following code uses the SelectCommand property of the SqlDataAdapter object to create a new command on the fly, and fill the same DataSet with a new DataTable called

Employees:

Licensed to [email protected]

524

Build Your Own ASP.NET 3.5 Web Site Using C# & VB

Figure 12.24. The Departments page

Visual Basic


adapter = New SqlDataAdapter( _

"SELECT DepartmentID, Department FROM Departments", conn)

adapter.Fill(dataSet, "Departments")

adapter.SelectCommand = New SqlCommand(_

"SELECT EmployeeID, Name, MobilePhone FROM Employees", conn)

adapter.Fill(dataSet, "Employees")

departmentsGrid.DataSource = dataSet

departmentsGrid.DataMember = "Employees"

departmentsGrid.DataBind()


C#


adapter = new SqlDataAdapter(

"SELECT DepartmentID, Department FROM Departments", conn);

adapter.Fill(dataSet, "Departments");

adapter.SelectCommand = new SqlCommand(

Licensed to [email protected]

Other books

thefiremargins by Lisanne Norman
Blood Bound by Patricia Briggs
Flying Backwards by Smith, Jennifer W
Taking Chances by Amanda Lukacs
High by LP Lovell