Title: Chuong 8: S? d?ng ADO .Net
1Chuong 8 S? d?ng ADO .Net
- Phan Tr?ng Ti?n
- Department of Software Engineering
- Hanoi University of Agriculture
- Office location 3rd floor, Administrative
building - Office phone 8276346, Ext 132
- Emailphantien84_at_gmail.com
2N?i dung chính
- T?ng quan
- T?ng quan ADO .Net
- .Net Data Provider
- Demo L?y d? li?u dùng ADO .Net
- Ð?i tu?ng DataSet
- Thi?t k? và g?n k?t d? li?u
- Tích h?p XML
- Lab T?o ?ng d?ng ADO.Net
3M?c dích c?a chuong
- Chuong này cung c?p sinh viên ki?n th?c c?n thi?t
d? tao các ?ng d?ng m?c cao truy c?p d? li?u dùng
VB.Net - Sau bài này sinh viên có th?
- Li?t kê các l?i ích ADO .Net
- T?o các ?ng d?ng dùng ADO .Net
- Li?t kê các thành ph?n chính c?a d?i tu?ng
ADO.Net và các ch?c nang c?a nó. - Dùng VS.Net d? thi?t k? và g?n k?t d? li?u
- Gi?i thích cách tích h?p XML cùng ADO.Net
41. T?ng quan
- B?n s? h?c cách s? d?ng ADO .Net
- Cách s? d?ng d?i tu?ng DataSet
- B?n s? h?c cách thi?t k? d? li?u trong VS.Net và
cách g?n d? li?u lên WinForm và WebForm. - Cu?i cùng b?n s? h?c cách tích h?p XML vào ADO
.Net
52. T?ng quan ADO .Net
- Gi?i thi?u ADO .Net
- Các l?i ích ADO .Net
6Gi?i thi?u ADO .Net
7Gi?i thi?u ADO.Net
- ADO.Net là m?t t?p các l?p cho phép các ?ng d?ng
.Net d?c và c?p nh?t thông tin DB và các noi luu
tr? d? li?u khác. Namespace System.Data - ADO.Net cung c?p d?ng nh?t cách truy c?p các
ngu?n d? li?u khác nhau nhu SQL Server, OLE DB,
các ngu?n d? li?u không quan h? nhu MS Exchange,
và các tài li?u XML - ADO.Net c?i ti?n kh? nang disconnect t?i d? li?u.
8Gi?i thi?u ADO.Net
- ADO.Net cung c?p hai .Net Data Providers
- .Net Data Provider cho SQL Server
- .Net Data Provider cho OLE DB
- ADO.Net cung c?p nhi?u công c? cho vi?c d?c, c?p
nh?t, thêm m?i và xóa d? li?u. Nhi?u d?i tu?ng
trong thu vi?n là tuong t? nhau và du?c nh?n di?n
qua tên ti?n t? c?a chúng ví d? nhu SqlDataReader
và OleDbDataReader c? hai d?u cung c?p d?c các
b?n ghi t? ngu?n d? li?u.
9Các l?i ích c?a ADO.Net
- Tuong t? nhu ADO
- Ðu?c thi?t k? cho d? li?u không k?t n?i.
- N?m trong n?i t?i .Net Framework nên r? dàng
trong vi?c s? d?ng ngôn ng? d? phát tri?n. - H? tr? XML
- ADO và XML có tru?c nhung không tuong thích
- ADO d?a trên co s? d? li?u quan h?.
- XML d?a trên co s? d? li?u phân c?p.
- ADO.Net k?t h?p hai công ngh? này l?i v?i nhau.
103. .Net Data Provider
- .Net Data Provider cho phép truy c?p các ngu?n d?
li?u xác d?nh - System.Data.SqlClient dùng truy câp SQL Server
7.0 tr? lên - System.Data.OleDbClient dùng truy c?p b?t k?
ngu?n d? li?u nào h? tr? OLE DB - Dùng d?i tu?ng Connection
- K?t n?i t?i m?t Database
- Dùng d?i tu?ng Command
- Th?c thi các câu l?nh
- Dùng d?i tu?ng Command v?i các Stored Procedure
- Dùng d?i tu?ng DataReader
- T?o m?t lu?ng d? li?u ch? d?c
- Dùng d?i tu?ng DataAdapter
- d? thay d?i d? li?u ngu?n và m?t DataSet
11Dùng d?i tu?ng Connection
- SqlConnection
- Dim conSQL As SqlClient.SqlConnection
- conSQL New SqlClient.SqlConnection( )
- conSQL.ConnectionString Server localhost
DataSource Northwind Uid sa Pwd sa - conSQL.Open( )
- OleDbConnection
- Dim conAccess As OleDb.OleDbConnection
- conAccess New OleDb.OleDbConnection( )
- conAccess.ConnectionString "Provider
- Microsoft.Jet.OLEDB.4.0Data Sourcec\NWind.MDB"
- conAccess.Open( )
12Dùng d?i tu?ng Command
- Có hai cách d? t?o d?i tu?ng Command
- S? d?ng Contructor Command
- S? d?ng phuong th?c CreateCommand
- Có ba cách d? th?c thi m?t Command
- ExecuteReader
- ExecuteScalar
- ExecuteNonQuery
- ExecuteXMLReader
Dim commSQL As SqlClient.SqlCommand commSQL New
SqlClient.SqlCommand( ) commSQL.Connection
conSQL commSQL.CommandText "Select Count()
from Authors" MessageBox.Show(commSQL.ExecuteScala
r( ).ToString)
13Dùng d?i tu?ng Command v?i các Stored Procedure
- T?o m?t d?i tu?ng Command
- Thi?t l?p CommandType là StoredProcedure
- Dùng phuong th?c Add d? t?o và thi?t l?p các bi?n
(Parameter) - Dùng thu?c tính ParameterDirection d? thi?t l?p
ki?u bi?n - G?i phuong th?c ExecuteReader
- Dùng các Record, r?i Close DataReader
- Truy c?p Output và tr? v? các bi?n (Parameter)
14Demo Dùng d?i tu?ng Command
- T?o m?t Store trong SQL Server
- CREATE PROCEDURE byroyalty _at_percentage int
- AS
- select au_id from titleauthor
- where titleauthor.royaltyper _at_percentage
- Code VB.Net
- Imports System.Data.SqlClient
- Private Sub Button1_Click(ByVal sender As
System.Object, ByVal - e As System.EventArgs) Handles Button1.Click
- Dim conSQL As SqlClient.SqlConnection
- conSQL New SqlClient.SqlConnection( )
- conSQL.ConnectionString Server
localhostDataBase Pubs" _ - UID saPWD sa"
- conSQL.Open( )
- Dim commSQL As SqlClient.SqlCommand New
SqlCommand( ) - commSQL.Connection conSQL
- commSQL.CommandType CommandType.StoredProcedure
- commSQL.CommandText "byroyalty"
15Demo Dùng d?i tu?ng Command
- Dim paramSQL As New SqlClient.sqlParameter( _
- "_at_percentage", SqlDbType.Int)
- paramSQL.Direction ParameterDirection.Input
- paramSQL.Value "30"
- commSQL.Parameters.Add(paramSQL)
- Dim datRead As SqlClient.SqlDataReader
- datRead commSQL.ExecuteReader( )
- Do While datRead.Read( )
- MessageBox.Show(datRead(0).ToString)
- Loop
- datRead.Close( )
- End Sub
16Dùng d?i tu?ng DataReader
- Ð?c d? li?u
- Dim commSQL As SqlClient.SqlCommand New _
- SqlClient.SqlCommand( )
- commSQL.Connection conSQL
- commSQL.CommandText "Select au_lname,au_fname
from authors" - Dim datRead As SqlClient.SqlDataReader
- datRead commSQL.ExecuteReader( )
- Do Until datRead.Read False
- MessageBox.Show(datRead.GetString(1) " "
- datRead.GetString(0))
- Loop
- datRead.Close( )
- L?y thông tin
- Tr? v? nhi?u t?p h?p k?t qu?
17Dùng d?i tu?ng DataAdapter
- Ðu?c s? d?ng nhu m?t liên k?t gi?a DataSource và
Các Table luu tr? trong Cache - Dim adaptSQL As New SqlClient.SqlDataAdapter( _
- "Select from authors", conSQL)
- Dim datPubs As DataSet New DataSet( )
- adaptSQL.Fill(datPubs, "NewTable")
- ' Manipulate the data locally
- adaptSQL.Update (datPubs, "NewTable")
184. Demo L?y d? li?u dùng ADO .Net
- B?n s? h?c cách l?y d? li?u t? CSDL SQL Server
b?ng vi?c dùng d?i tu?ng SQLDataAdapter trong
VB.Net.
195. Ð?i tu?ng DataSet
- T?ng quan v? d? li?u không k?t n?i
- Ð?i tu?ng DataSet
- Cu trú d? li?u trong DataSet
- S? d?ng Relationship trong DataSet
- S? d?ng các Constraint
- C?p nh?t d? li?u trong DataSet
- C?p nh?t d? li?u t?i ngu?n
20T?ng quan v? d? li?u không k?t n?i
21T?ng quan v? d? li?u không k?t n?i
- M?i công ngh? truy c?p d? li?u d?u dã du?c c?i
thi?n khái niêm không k?t n?i, nhung d?n ADO.Net
m?i cung c?p gi?i pháp cách d?y d?. - ADO.Net du?c thi?t k? dùng cho Internet
- ADO.Net s? d?ng XML nhu là các d?nh d?ng truy?n
t?i. - ADO.Net cung c?p m?t d?i tu?ng m?i cho vi?c
caching d? li?u trên máy client. Ð?i tu?ng này là
DataSet
22Ð?i tu?ng DataSet
23Cu trú d? li?u trong DataSet
- Cu trú d? li?u trong DataSet t? m?t RDBMS
- Dim adaptSQL As SqlClient.SqlDataAdapter
- adaptSQL New SqlClient.SqlDataAdapter(
- "Select from authors", conSQL)
- Dim datPubs As DataSet New DataSet( )
- adaptSQL.Fill(datPubs, "NewTable")
- L?p trình t?o Dataset
- Dim datPubs As DataSet New DataSet( )
- Dim tblAuthors As DataTable New
DataTable("authors") - tblAuthors.Columns.Add("AuthorID",
System.Type.GetType - ("System.Int32"))
24S? d?ng Relationship trong DataSet
- T?o Relationship
- Dim relPubsTitle As DataRelation New
DataRelation( - "PubsTitles",
- datPubs.Tables("Publishers").Columns("pub_id"),
- datPubs.Tables("Titles").Columns("pub_id"))
- datPubs.Relations.Add(relPubsTitle)
- Truy c?p d? li?u quan h?
- Dim PubRow, TitleRow As DataRow, TitleRows( ) As
DataRow - PubRow datPubs.Tables("Publishers").Rows(0)
- TitleRows PubRow.GetChildRows("PubsTitles")
25S? d?ng các Constraint
- T?o New Constraint
- ForeignKeyConstraints dây là ràng bu?c di?u
khi?n m?t hàng con khi hàng cha du?c update ho?c
delete - UniqueConstraints dây là ràng bu?c d?m b?o các
giá tr? trong m?t c?t ho?c các c?t là duy nh?t. - S? d?ng Constraint t?n t?i
- adaptSQL New SqlClient.SqlDataAdapter("Select
title_id, - title, type, price from titles", conSQL)
- adaptSQL.FillSchema(datPubs, schematype.Source,
"Titles") - adaptSQL.Fill(datPubs, "Titles")
- 'Edit some data
- adaptSQL.Fill(datPubs, "Titles")
26C?p nh?t d? li?u trong DataSet
- Thêm Rows
- Dim drNewRow As DataRow datPubs.Tables("Titles")
.NewRow - 'Populate columns
- datPubs.Tables("Titles").Rows.Add(drNewRow)
- Thay d?i Rows
- drChangeRow.BeginEdit( )
- drChangeRow("Title") drChangeRow("Title").ToStri
ng " 1" - drChangeRow.EndEdit( )
- Xóa d? li?u
- datPubs.Tables("Titles").Rows.Remove(drDelRow))
27C?p nh?t d? li?u t?i ngu?n
- Ch? rõ ràng các c?p nh?t
- T? d?ng phát sinh update
Dim comm As comm.CommandText "Insert into
titles(" _ "title_id, title, type)
values(_at_t_id,_at_title,_at_type)" comm.Parameters.Add("_at_
t_id",SqlDbType.VarChar,6,"title_id") comm.Paramet
ers.Add("_at_title",SqlDbType.VarChar,80,"title") com
m.Parameters.Add("_at_type",SqlDbType.Char,12,"type")
adaptSQL.InsertCommand comm adaptSQL.Update(dat
Pubs, "titles")
Dim sqlCommBuild As New SqlCommandBuilder(adaptSQL
) adaptSQL.Update(datPubs, "titles") MsgBox(sqlCom
mBuild.GetInsertCommand.ToString)
28Demo S? d?ng DataSet
296.Thi?t k? và g?n k?t d? li?u
- Thi?t k? DataSet
- Tùy ch?nh form d? li?u
- G?n d? li?u trong WinForms
- G?n d? li?u trong WebForms
30Thi?t k? DataSet
- Tùy ch?nh c?u hình DataAdapter
- Phát sinh d?i tu?ng DataAdapter trong th? t?c
InitializeComponent dùng trong code c?a b?n. - Công c? phát sinh DataSet
- Phát sinh m?t DataSet trên co s? d? li?u dã t?n
t?i m?t DataAdapter.
31Tùy ch?nh c?u hình DataAdapter
- Tên k?t n?i
- Ki?u truy v?n
- Câu l?nh SQL
- Ho?c Stored Procedure m?i
- Ho?c Stored Procedure dã t?n t?i
- Các chi ti?t l?a ch?n câu truy v?n
32Công c? phát sinh DataSet
- Ðây là công c? phát sinh DataSet t? d?ng t?
DataAdapter
33Tùy ch?nh form d? li?u
- Các thông tin du?c yêu c?u
- Tên c?a DataSet
- Connection du?c s? d?ng
- Các Table ho?c các View nào, và các c?t c?a
chúng. - Cách hi?n th? d? li?u
- Nh?ng button nào du?c t?o
34Demo S? d?ng Form tùy ch?nh d? li?u
35G?n d? li?u trong WinForms
- Cách g?n don gi?n
- Cách g?n ph?c t?p
da New SqlClient.SqlDataAdapter("Select
au_lname, " _ "au_fname from authors",
sqlconn) da.Fill(ds, "authors") TextBox1.DataBindi
ngs.Add("Text", _ ds.Tables("authors"),
"au_fname")
da New SqlClient.SqlDataAdapter("Select
au_lname, " _ "au_fname from authors",
sqlconn) da.Fill(ds, "authors") DataGrid1.DataSour
ce ds.Tables("authors")
36G?n d? li?u trong WebForms
Dim sqlComm As New SqlClient.SqlCommand("Select
_ from authors", sqlconn) Dim sqlReader As
SqlClient.SqlDataReader sqlReader
sqlComm.ExecuteReader DataGrid1.DataSource( )
sqlReader DataGrid1.DataBind( )
377.Tích h?p XML
- T?i sao ph?i dùng schemas (gi?n d?)?
- Miêu t? c?u trúc XML
- T?o Schemas
- S? d?ng XML và Schemas trong ADO.Net
- DataSets và XmlDataDocuments
38T?i sao ph?i dùng Schemas
- Ð?nh nghia d?nh d?ng c?a d? li?u
- S? d?ng d? ki?m tra tính h?p l?
- Có l?i th? hon qua vi?c d?nh nghia các ki?u tài
li?u (document type definitions - DTSs ) - Cú pháp XML
- S? d?ng l?i các ki?u
- Nhóm m?t nhóm các ph?n t?
39Miêu t? c?u trúc XML
- Schemas có th? du?c miêu t? g?m
- Các ph?n t? trong tài li?u (E)
- Các thu?c tính tính trong tài li?u (A)
- Các quan h? gi?a ph?n t? và thu?c tính (R)
- Các ki?u d? li?u
- Th? t? c?a các ph?n t?
- Các ph?n t? nào là tùy ch?n
40Ví d? m?t tài li?u XML
- lt?xml version"1.0" ?gt
- ltpubsgt
- ltPublishersgt
- ltpub_idgt0736lt/pub_idgt
- ltpub_namegtLucerne Publishinglt/pub_namegt
- ltcitygtBostonlt/citygt
- ltstategtMAlt/stategt
- ltcountrygtUSAlt/countrygt
- lt/Publishersgt
- ltPublishersgt
- ltpub_idgt0877lt/pub_idgt
- ltpub_namegtLitware, Inc.lt/pub_namegt
- ltcitygtWashingtonlt/citygt
- ltstategtDClt/stategt
- ltcountrygtUSAlt/countrygt
- lt/Publishersgt
- lt/pubsgt
41Ví d? Tài li?u này liên k?t m?t schema d? miêu t?
c?u trúc
- ltxsdschema id"pubs targetNamespace"http//temp
uri.org/Publishers.xsd" - xmlns"http//tempuri.org/Publishers.xsd
xmlnsxsd"http//www.w3.org/2001/XMLSchema" - xmlnsmsdata"urnschemas-microsoft-comxml-msdata
attributeFormDefault"qualified
elementFormDefault"qualified"gt - ltxsdelement name"pubs" msdataIsDataSet"true
msdataEnforceConstraints"False"gt - ltxsdcomplexTypegt
- ltxsdchoice maxOccurs"unbounded"gt
- ltxsdelement name"Publishers"gt
- ltxsdcomplexTypegt
- ltxsdsequencegt
- ltxsdelement name"pub_id type"xsdstring"
minOccurs"0" /gt - ltxsdelement name"pub_name type"xsdstring"
minOccurs"0" /gt - ltxsdelement name"city type"xsdstring"
minOccurs"0" /gt - ltxsdelement name"state type"xsdstring"
minOccurs"0" /gt - ltxsdelement name"country type"xsdstring"
minOccurs"0"/gt - lt/xsdsequencegt
- lt/xsdcomplexTypegt
- lt/xsdelementgt
- lt/xsdchoicegt
- lt/xsdcomplexTypegt
42T?o Schemas
- T?o Schemas t? các tài li?u XML dã t?n t?i.
- T?o Schemas t? Databases
- Làm vi?c v?i Schemas
- Ki?m tra các tài li?u XML d?a vào Schema
43Dùng d? li?u XML và schemas trong ADO.Net
- N?p d? li?u XML vào m?t DataSet
- S? d?ng ki?u DataSet du?c d?nh nghia
- Tang hi?u nang
- Ðon gi?n trong vi?c coding
Dim datXML As DataSet New DataSet() datXML.ReadX
ml("c\publishers.xml") MessageBox.Show(datXML.Tab
les(0).Rows(0)(0).ToString)
MessageBox.Show(pubs.Publishers(0).pub_id)
44DataSets và XmlDataDocuments
45Demo S? d?ng XML Schema