asp2 ado datareader
DESCRIPTION
ASP2 ADO DataReaderTRANSCRIPT
ASP.NET and ADO.NET - 1 Sonata Software Limited
Database Applications
Customer Management
Name: John DoeAddress: 101 Dalmation Street Salary: $43,000 Age: 34
PF1 - Help PF2 - Add PF3 - Update
File Edit Window HelpCustomer Management
Name:
Address:
Salary:
John Doe
101 Dalmation St.
$48,000
CancelLoan History Update
Age: 34
CUI client
GUI client
Database Server
Disks & Files
Enter details and press PF3 to update
Networks
Browser client
Application Server
Web Server
Interne/
Intranet
Interne/
Intranet
LAN / WAN
LAN / WAN
ASP.NET and ADO.NET - 2 Sonata Software Limited
DataReader: Direct Access to Database
Connection
Command DataReader
Command
•Select •Stored procedure
•Insert•Update•Delete •Stored procedure
Client Application
Database
Read
Write
Windows Form
Web Form
ASP.NET and ADO.NET - 3 Sonata Software Limited
Cursor of a "Record Set"
100 Java 200.00
200 HTML 250.00
300 C 300.00
400 XML 240.00
Record set
Initial position of cursor
Current cursor position
dr.read() moves the cursor to the next row and return TrueTrue if the next row exists.
If current cursor position is here, then the
execution of dr.read() returns FalseFalse.
Num Name Price0 1 2
Column index
Column name
Dim dr As OleDbDataReader dr = catCMD.ExecuteReader()
ASP.NET and ADO.NET - 4 Sonata Software Limited
Accessing Column Values
• Accessing the value of a column from the current record in the record set, e.g., dr, you can use either dr(i) where i is an ordinal reference (0, 1, 2, ...) or dr("ColumnName").
• It will return an object and when it is used for output, it is implicitly converted to string data type.
• If you want to use Type Safe Reference, you can use dr.GetXXX(i) where i is an ordinal reference (0, 1, 2, ...) and XXX is the appropriate data type of the column such as dr.GetDecimal(2).
• Type Safe Reference is more convenient when you want to format the retrieved data or to use it in a calculation. You cannot use column names with Type Safe Reference.
By Zero-based Column Type Safe or Ordinal Reference
By Column Name String Reference
Returned Value
dr.getInt32(0) or dr(0) dr("Num") 200
dr.getString(1) or dr(1) dr("Name") HTML
dr.getDecimal(2) or dr(2) dr("Price") 250.00
dr.getDecimal("Price") is illegal! dr.getDecimal("Price") is illegal!
ASP.NET and ADO.NET - 5 Sonata Software Limited
Categories Table in NorthWind Access Database
ASP.NET and ADO.NET - 6 Sonata Software Limited
CategoryList.aspx
ASP.NET and ADO.NET - 7 Sonata Software Limited
Using DataReader
Categorytable
NorthWind
100
ASP.NET Code
100
Record set
SQL statementFormat result result set rows in set rows in HTML formatHTML format
Dynamically generated Dynamically generated web pageweb page
12
34
DataReader
5
Retrieve result set,result set,one row at a time.one row at a time.
ASP.NET and ADO.NET - 8 Sonata Software Limited
CategoryList.aspx<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data.OleDB" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
Protected Sub Page_Load (ByVal sender As Object, ByVal e As System.EventArgs)
Dim conn As OleDbConnection
Dim cmd As OleDbCommand
Dim dr As OleDbDataReader conn = New _
OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("Northwind.mdb")
ASP.NET and ADO.NET - 9 Sonata Software Limited
CategoryList.aspx - continued If Not IsPostBack Then Try
conn.Open() cmd = New OleDbCommand("select * from categories", conn) cmd.CommandType = CommandType.Text ' require
Namespace="System.Data"
dr = cmd.ExecuteReader() While dr.Read() Label1.Text &= dr.GetInt32(0) & "--" _ & dr.GetString(1) & "--" _ & dr.GetString(2) & "<br>" End While Catch ex As Exception Label1.Text = "Database error!" & "<br>" & ex.Message Finally dr.Close() conn.Close() End Try End If End Sub</script>
ASP.NET and ADO.NET - 10 Sonata Software Limited
CategoryList.aspx - continued
<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>ADO.NET Example - 1</title></head><body> <H1>List of categories</H1> <form id="form1" runat="server"> <div> <asp:Label id="Label1" runat="server"></asp:Label> </div> </form></body></html>
ASP.NET and ADO.NET - 11 Sonata Software Limited
Commonly Used DataReader Properties and Methods
ASP.NET and ADO.NET - 12 Sonata Software Limited
Using Code-Behind
ASP.NET and ADO.NET - 13 Sonata Software Limited
CategoryList2.aspx<%@ Page Language="VB" AutoEventWireup="false"
CodeFile="CategoryList2.aspx.vb" Inherits="CategoryList2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Untitled Page</title></head><body> <H1>List of categories</H1> <form id="form1" runat="server"> <div> <asp:Label id="Label1" runat="server"></asp:Label> </div> </form></body></html>
ASP.NET and ADO.NET - 14 Sonata Software Limited
CategoryList2.aspx.vbImports System.Data.OleDBImports System.Data
Partial Class CategoryList2 Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim conn As OleDbConnection Dim cmd As OleDbCommand Dim dr As OleDbDataReader conn = New _ OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath("Northwind.mdb")) If Not IsPostBack Then Try
conn.Open() cmd = New OleDbCommand("select * from categories", conn) cmd.CommandType = CommandType.Text ' require Namespace="System.Data" dr = cmd.ExecuteReader() While dr.Read() Label1.Text &= dr.GetInt32(0) & "--" _ & dr.GetString(1) & "--" _ & dr.GetString(2) & "<br>" End While Catch ex As Exception Label1.Text = "Database error!" & "<br>" & ex.Message Finally
conn.Close() End Try End If
End SubEnd Class
ASP.NET and ADO.NET - 15 Sonata Software Limited
CategoryList3.aspx
ASP.NET and ADO.NET - 16 Sonata Software Limited
Using DataReader
Categorytable
NorthWind
100
ASP.NET Code
100
Record set
SQL statementFormat result result set rows in set rows in HTML formatHTML format
Dynamically generated Dynamically generated web pageweb page
1
2
34
DataReader
5
<form action="xxx.aspx" method="post"> (from a static HTML page)
<a href="xxx.aspx?cid=7&name=Produce"> Product</a>
Retrieve result set,result set,one row at a time.one row at a time.
Invocation of ASP.NET programs
ASP.NET and ADO.NET - 17 Sonata Software Limited
Generated HTML Source Code<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>
<HEAD><TITLE>Category Listing</TITLE></HEAD><BODY><H1>Category List</H1><table border=4><tr> <th>ID</th> <th>ID</th> </tr><tr>
<td>1</td><td>Beverages</td>
</tr><tr>
<td>2</td><td>Condiments</td>
</tr><tr>
<td>3</td><td>Confections</td>
</tr>……….</table>
</BODY></HTML>
ASP.NET and ADO.NET - 18 Sonata Software Limited
CategoryList3.aspx<%@ Page Language="VB" %><%@ Import Namespace="System.Data.OleDB" %><%@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim table As System.Text.StringBuilder table = New System.Text.StringBuilder("") If Not IsPostBack Then Dim conn As OleDbConnection Dim cmd As OleDbCommand Dim dr As OleDbDataReader
conn = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath("Northwind.mdb"))
Try conn.Open() cmd = New OleDbCommand("select * from categories", conn) cmd.CommandType = CommandType.Text dr = cmd.ExecuteReader() table.Append("<table><table border='1'><tr>") table.Append("<th>ID</th><th>Name</th></tr>") While dr.Read() table.Append("<tr><td> " & dr.GetInt32(0)) table.Append("</td><td> " & dr.GetString(1) & "</td></tr>") End While
ASP.NET and ADO.NET - 19 Sonata Software Limited
Catch ex As Exception Label1.Text = "Database error!" & "<br>" & ex.Message Finally
conn.Close() table.Append("</table>") Label1.Text = table.ToString() End Try End If End Sub</script><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Category List</title></head><body> <H1>Category List</H1> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server"></asp:Label> </div> </form></body></html>
CategoryList3.aspx - Continued
ASP.NET and ADO.NET - 20 Sonata Software Limited
The Data Model of the NorthWind Database
ASP.NET and ADO.NET - 21 Sonata Software Limited
Drill Down Data Navigation
http://localhost:3459/tutor/ProductBycategory.aspx?cid=1&cname=Beverages
ASP.NET and ADO.NET - 22 Sonata Software Limited
CategoryList4.aspx
<%@ Page Language="VB" %><%@ Import Namespace="System.Data.OleDB" %><%@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim nwindConn As OleDbConnection Dim catCMD As OleDbCommand Dim myReader As OleDbDataReader nwindConn = _ New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath("Northwind.mdb")) Try catCMD = nwindConn.CreateCommand() catCMD.CommandText = "SELECT CategoryID, CategoryName FROM Categories" nwindConn.Open() myReader = catCMD.ExecuteReader() Label1.Text &= "<table border=4><tr><th>ID</th><th>Name</th></tr>" Do While myReader.Read() Label1.Text &= "<tr><td>" & myReader("CategoryID") & _ "</td><td> <a href='ProductsBycategory.aspx?cid=" & _ myReader("CategoryID") & "&cname=" & _ Server.UrlEncode(myReader("CategoryName")) & "'>" & _ myReader("CategoryName") & "</a> </td></tr>" Loop
http://localhost:3459/tutor/ProductBycategory.aspx?cid=1&cname=Beverages
ASP.NET and ADO.NET - 23 Sonata Software Limited
CategoryList4.aspx - Continued Catch ex As Exception
Label1.Text = "Database error!" & "<br>" & ex.Message Finally
nwindConn.Close() nwindConn = Nothing Label1.Text &= "</table>" End Try End Sub</script>
<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Category List</title></head><body> <H1>Category List</H1> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server"></asp:Label> </div> </form></body></html>
ASP.NET and ADO.NET - 24 Sonata Software Limited
ProductsByCategory.aspx<%@ Page Language="VB" %><%@ Import Namespace="System.Data.OleDB" %><%@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim conn As OleDbConnection Dim cmd As OleDbCommand Dim dr As OleDbDataReader
LabelTitle.Text = “Products from “ & Request.QueryString("cname")conn = _
New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath("Northwind.mdb"))
Try cmd = conn.CreateCommand()
cmd.CommandText = "SELECT ProductID, ProductName, UnitPrice FROM Products" & _ " Where CategoryID=" & Request.QueryString("cid") conn.Open() dr = cmd.ExecuteReader() Label1.Text &= "<table border=4><tr><th>ID</th><th>Name</th><th>Price</th></tr>" Do While dr.Read() Label1.Text &= "<tr><td>" & dr("ProductID") & _ "</td><td> <a href='ProductDetail.aspx?pid=" & _
dr("ProductID") & "'>" & _ dr("ProductName") & "</a> </td><td align='right'>" & _ Format(dr("UnitPrice"), "$#,##0.00") & "</td></tr>"
Loop
ASP.NET and ADO.NET - 25 Sonata Software Limited
ProductsByCategory.aspx - Continued Catch ex As Exception
Label1.Text = "Database error!" & "<br>" & ex.Message Finally
conn.Close() conn = Nothing Label1.Text &= "</table>" End Try End Sub</script><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Category List</title></head><body> <H1>Products from <asp:Label ID="LabelTitle" runat="server" Text="Label"></asp:Label> </H1> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server"></asp:Label> </div> </form></body></html>
ASP.NET and ADO.NET - 26 Sonata Software Limited
Generating HTML Dynamically
<tr><td> 1 </td><td> Beverages </td></tr>
"<tr><td>" & 1 & "</td><td>" & Beverages & "</td></tr>"
"<tr><td>" & dr(0) & "</td><td>" & dr(1) & "</td></tr>"
Separate static text from dynamic ones
Replace dynamic data with actual DataReader methods
ASP.NET and ADO.NET - 27 Sonata Software Limited
Label1.Text &= "<tr><td>" & myReader("CategoryID") & _ "</td><td> <a href='ProductsBycategory.aspx?cid=" & _ myReader("CategoryID") & "&cname=" & _ Server.UrlEncode(myReader("CategoryName")) & "'>" & _ myReader("CategoryName") & "</a> </td></tr>"
<tr><td> 1 </td><td><a href='ProductsByCategory.aspx?cid=11&cname=BeveragesBeverages'>Beverages</a></td></tr>
"<tr><td>" & 11 & "</td><td><a href='ProductsByCategory.aspx?cid=" & 11 & "&cname=" & BeveragesBeverages & "'>" & Beverages Beverages & "</a></td></tr>"
"<tr><td>" & dr(0)dr(0) & "</td><td><a href='ProductsByCategory.aspx?cid=" & dr(0)dr(0) & "&cname=" & dr(1)dr(1) & "'>" & dr(1)dr(1) & "</a></td></tr>"
ASP.NET and ADO.NET - 28 Sonata Software Limited
Design View
ASP.NET and ADO.NET - 29 Sonata Software Limited
ProductDetail.aspx<%@ Page Language="VB" %><%@ Import Namespace="System.Data.OleDB" %><%@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Dim nwindConn As OleDbConnection = _ New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath("Northwind.mdb")) Dim prodCMD As OleDbCommand = nwindConn.CreateCommand()
ASP.NET and ADO.NET - 30 Sonata Software Limited
SQL Statement - Join
SELECT ProductID, ProductName, UnitPrice, Products.CategoryID, CategoryName, Discontinued FROM Products, Categories
Where ProductID=11 AND Products.CategoryID = Categories.categoryID
ASP.NET and ADO.NET - 31 Sonata Software Limited
prodCMD.CommandText = _
"SELECT ProductID, ProductName, UnitPrice, Products.CategoryID as x, " & _ " CategoryName, Discontinued FROM Products, Categories" & _
" Where ProductID=" & Request.QueryString("pid") & _ " AND Products.CategoryID = Categories.categoryID " Dim dr As OleDbDataReader Try nwindConn.Open() dr = prodCMD.ExecuteReader() If dr.Read() Then LabelProductID.Text = Request.Params("pid") LabelProductName.Text = dr("ProductName") LabelCategoryID.Text = dr("CategoryID") LabelCategoryName.Text = dr("CategoryName") LabelUnitPrice.Text = dr("UnitPrice")
CheckBoxDiscontinued.Checked = dr("Discontinued") HyperLinkProductList.NavigateUrl = _ "ProductsByCategory.aspx?cid=" _
& dr("CategoryID") & “cname=“ & dr(“CategoryName”) Else LabelErrorMsg.Text = "No product found!" End If Catch ex As Exception LabelErrorMsg.Text = "Database error!" & "<br>" & ex.Message Finally nwindConn.Close() End Try End Sub</script>
continued
ASP.NET and ADO.NET - 32 Sonata Software Limited
Continued…<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Product Detail</title></head><body> <form id="form1" runat="server"> <div> <P><STRONG><FONT size="4">Product Detailed Information<BR> </FONT></STRONG> <asp:label id="LabelErrorMsg" runat="server"></asp:label><BR>Product ID: <asp:label id="LabelProductID" runat="server"></asp:label><BR>Product Name: <asp:label id="LabelProductName" runat="server"></asp:label><BR>Category ID: <asp:label id="LabelCategoryID" runat="server"></asp:label><BR>Category Name: <asp:label id="LabelCategoryName" runat="server"></asp:label><BR>Unit Price: <asp:label id="LabelUnitPrice" runat="server"></asp:label><BR><asp:checkbox id="CheckBoxDiscontinued" runat="server"
Text="Discontinued"></asp:checkbox></P><P> <asp:hyperlink id="HyperLinkProductList" runat="server">
Back to product list of the same Category</asp:hyperlink><BR> <a href="CategoryList4.aspx">Show all product category. </A>
</div> </form></body></html>
ASP.NET and ADO.NET - 33 Sonata Software Limited
ASP.NET and ADO.NET - 34 Sonata Software Limited
Domain Name: 63642.hostmyapplications.com Technical Contact Username: aspne3mzTechnical Contact Password: xxxxxxx URL used to access your site: http://63642.hostmyapplications.com
ASP.NET and ADO.NET - 35 Sonata Software Limited
• Highlight Source (Local) Web Site files
• Click the right pointing arrow to upload
URL used to access your page at: http://63642.hostmyapplications.com/CategoryList.aspx