Chương 3: Xử lý dữ liệu với ADO.NET ADO NET
(cid:190) Giới thiệu về ADO.NET (cid:190) Giới thiệu về ADO.NET
(cid:190) Các đối tượng trong ADO.NET
(cid:190) Điều khiển liên kết dữ liệu
ASP.NET
1
ASP.NET
2
3.1. Giới thiệu ADO.NET
-ADO.NET (Active Data Object) là một phần của
.NET Framework, cung cấp các dịch vụ xử lý dữ liệu
- Làm việc với dữ liệu không kết nối
g
-Dữ liệu được lưu trữ trong một CSDL thu nhỏ gọi là
DataSet =>tăng tốc độ tính toán, giảm sử dụng tài
ụ g
, g
g
ộ
nguyên trên Database server.
-Khả năng xử lý dữ liệu dạng chuẩn XML =>làm việc làm việc Khả năng xử lý dữ liệu dạng chuẩn XML
với nhiều ứng dụng khác
ASP.NET
3
3.1. Giới thiệu ADO.NET
ASP.NET
4
3.1. Giới thiệu ADO.NET
- Kiến trúc ADO.NET có hai đối tượng chính: Dataset
(data table) và .NET data provider (Data Adapter,
DataReader, Command, Connection)
-Dataset lưu data từ Database
-Để nhận data từ CSDL, DataAdapter dùng câu lệnh
ệ
g
ậ
p
,
SELECT trong Command, để cập nhật data dùng
INSERT, UPDATE, DELETE
ASP.NET
5
Các đối tượng con của DataSet
ASP.NET
6
Các lợi ích Dataset
- Hoàn toàn trong bộ nhớ: Một Table trong Dataset là một
Array of Rows, nên ta có thể dùng thẳng (direct access)
một record bằng cách nói đến cái Row chứa nó, chớ không
cần phải dùng MoveNext, MovePrev,.v.v.
- Làm nhẹ công tác của Database server. Tất cả mọi công
tác sửa đổi dữ liệu đều được thực hiện trong Dataset.
- Dataset có thể được biểu diễn bằng một XML (eXtensible
ợ
g
ộ
(
Marked Language)
ASP.NET
7
Sự cạnh tranh và cấu trúc dữ liệu ngắt (Concurrency and the disconnected (Concurrency and the disconnected data architecture)
ASP.NET
8
- Cách sử lý - có 2 cách: Optimistic concurrency (default) và “Last in wins” - Làm thế nào để tránh bị trường hợp concurrency? - Làm thế nào để tránh bị trường hợp concurrency?
Các điểm nổi bật của ADO.NET
-Tương tác giữa nhiều hệ thống khác nhau
g
g
ệ
g
(Interoperability)
-Hỗ trợ nhiều người dùng (Scanlability) Hỗ trợ nhiều người dùng (Scanlability)
-Mở rộng khả năng làm việc với CSDL
(Productivity)
-Hiệu quả cao trong xử lý dữ liệu Hiệu quả cao trong xử lý dữ liệu
(Performance)
ASP.NET
9
3.2.Các đối tượng trong ADO.NET
6.2.1. Khai báo và sử dụng không gian tên (namespace)
Namespace
p
ụ
-System.Data
ệ
p
System.Data.OleDb -System Data OleDb
-System.Data.SqlClient
Mục đích -Các đối tượng và kiểu cơ bản phục vụ ADO.NET ợ -Các lớp được thiết kế để làm việc với bất kỳ nguồn dữ liệu nào - Thiết kế tối ưu cho CSDL SQL server
ASP.NET
10
<%@ Import Namespace="System.Data.OleDb" %>
3.2.2. Đối tượng Connection
a) Data Provider a) Data Provider
- Data Provider có sẵn trong ADO.NET
System.Data.OleDb System.Data.SqlClient
- Ứng với mỗi tên miền có một
connection tương ứng connection tương ứng System.Data.OleDb.OleDbConnection System.Data.SqlClient.SqlConnection System Data SqlClient SqlConnection
ASP.NET
11
b) Connection String
-Cung cấp thông tin cần thiết cho kết nối
(cid:190)OLEDB Provider có thể gồm các thành phần:
-Phụ thuộc vào Data Provide ộ ụ
Provider + Provider
+ Data Source
+ User ID, Password
Ví dụ 1: Tạo connection đến CSDL Microsoft Access
Dim ConnString As String ConnString = "Provider=Microsoft.Jet.OLEDB.4.0 ;data source=" & _
Server.MapPath("./dbase/DBHuan.mdb")
ASP.NET
12
Dim ConnDB As New OleDbConnection(ConnString)
b) Connection String - OLEDB Provider
Ví dụ 2: Tạo Connection đến CSDL SQL Server
Dim ConnString As String
‘ Chuỗi kết nối
ConnString = "Provider=SQLOLEDB ;data source=" & _ C S i "P SQLOLEDB d
" &
id
<địa chỉ TCP/IP hay tên máy> & _
“;Initial Catalog =” &
ASP.NET
13
‘ Tạo kết nối Dim ConnDB As New OleDbConnection(ConnString)
b) Connection String - SQLClient Provider
Data Source
-Initial Catalog Initial Catalog
-Integrated security: True (SSPI)/ False chỉ định dùng
cơ chế bảo mật của Windows Login (True) hay cơ
ật ủ Wi d
hế bả
L i
) h
(T
chế bảo mật của SQL Server (False)
-User ID
-Password
ASP.NET
14
Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\khachhang.mdf; Integrated Security=True;User Instance=True
b) Connection String - SQLClient Provider
VD 3: Tạo Connection đến CSDL SQL Server
ạ
Dim ConnString As String
‘ Chuỗi kết nối
ConnString = “Data Source=" & _
;Initial Catalog &
<địa chỉ TCP/IP hay tên máy> & _
“;Initial Catalog =” &
ASP.NET
15
‘ Tạo kết nối Dim ConnDB As New SqlConnection(ConnString)
b) Connection String - SQLClient Provider
VD 4: Tạo Connection đến CSDL SQL Server
ạ
Dim ConnString As String
‘ Chuỗi kết nối
ConnString = “Data Source=" & _
<địa chỉ TCP/IP hay tên máy> & _
“;Initial Catalog =” &
ASP.NET
16
‘ Tạo kết nối Dim ConnDB As New SqlConnection(ConnString)
c) Các phương thức trên đối tượng Connection Connection
-Open: Thực hiện kết nối với các thông tin đã
ự
g
p
ệ
khai báo trong Connection String
-Dispose: Xóa mọi tài nguyên liên quan đến Dispose: Xóa mọi tài nguyên liên quan đến
Connection trên vùng nhớ
-Close: Đóng kết nối với nguồn dữ liệu
VD: ConnDB.Open(), ConnDB.Close() VD: ConnDB Open() ConnDB Close()
ConnDB.Dispose()
ASP.NET
17
Một số đặc tính quan trong khác của OleDbConnection OleDbConnection
Đặc tính
Dạng data
ý nghĩa khoảng thời gian cố gắng tạo liên kết VD: ConnString= "Provider….; Connect Tirneout=11"
ConnectionTimeout Int32
Database Database String String
Trả về tên CSDL đã kết Trả về tên CSDL đã kết nối
ServerVersion String
Trả về version của nguồn CSDL ồ CSDL
State
ợ g StateConnection ) (0,1,2,4,8,16) , , ( , , ,
ASP.NET
18
Trả về trạng thái hiện tại của đối tượng: ạ actived hay hủy rồi
3.2.3. Đối tượng Command
-Khai báo và sử dụng đối tượng Command:
+ đối với SqlConnection:
Dim MyCom As SqlCommand
MyCom = New SqlCommand(ConnString, ConnDB)
+ đối với OleDbConnection
Dim MyCom As OleDbCommand Di M C d A Ol DbC
ASP.NET
19
MyCom = New OleDbCommand(ConnString,ConnDB)
a) Các thuộc tính của Command
-CommandText: Tên bảng, lệnh SQL hoặc Store Procedure
-CommandType: Tương ứng với giá trị của CommandText
Text: câu lệnh SQL (default) + Text: câu lệnh SQL (default)
+ Storeprocedure: thủ tục nội
+ TableDirect: tên bảng + TableDirect: tên bảng
-Connection: Đối tượng Connection sử dụng cho
Command C d
-Parameters: Tập hợp các tham số dùng trong Command
ASP.NET
20
b) Các phương thức thực hiện Command
(cid:190)ExecuteNonquery: Dùng để gọi thực hiện các câu truy vấn cập nhật INSERT, UPDATE, DELETE mà không quan tâm đến dữ liện trả về.
VD: Xóa trường “AuthorName” có giá trị “Joe Smith” trong bảng “Authors” của CSDL “books.mdb”
“DELETE f
A th N
A th
‘J
h
d(S lSt i C
N Ol DbC
Dim ConnString SqlString As String Dim ConnString, SqlString As String Dim ConnDB, MyCom ConnString = “…server.MapPath(./books.mdb) SqlString = “DELETE from Authors where AuthorName=‘Joe Smith’” S ith’” S lSt i ConnDB = New OleDbConnection(ConnString) ConnDB.Open() M C MyCom = New OleDbCommand(SqlString,ConnDB) DB) MyCom.ExecuteNonQuery() ConnDB.Close()
ASP.NET
21
b)Các phương thức thực hiện Command Command
(cid:190)ExecuteReader: Trả về một đối tượng DataReader để đọc
dữ liệu mỗi lần một dòng với method Read(). DataReader
đọc dữ liệu trực tiếp từ Database => duy trì kết nối cho đến
khi đọc xong
Gọi: MyCom.ExecuteReader()
(cid:190)ExecuteScalar: Trả về giá trị của cột đầu tiên và dòng đầu
tiên
Gọi: MyCom.ExecuteScalar()
ASP.NET
22
c) Parameter
Xét trường hợp sau:
SELECT CustomerID,CompanyName,Phone From Customers
WHERE CustomerID = “FPT”
SELECT CustomerID,CompanyName,Phone From Customers
WHERE CustomerID = ? WHERE C t ID ?
VD:
cmd.CommandText = SELECT….WHERE CustomerID = ? cmd CommandText =“SELECT WHERE CustomerID = ?”
Dim Par As OleDbParameter = cmd.CreateParameter()
FPT Par.Value = “FPT” Par.Value
ASP.NET
23
cmd.Parameters.Add(Par)
c) Parameter
Các thuộc tính thường dùng nhất của OleDbParameter Các thuộc tính thường dùng nhất của OleDbParameter
-DataType: chỉ dạng dữ liệu
+ Input(mặc định) tham số đầu vào
+ Output: tham số đầu ra
+ InputOutput: tham số vào và ra
+ ReturnValue: loại tham số nhận giá trị trả về của một thủ tục nội hay một
hàmhàm
-Direction: Loại tham số với các giá trị ị g ạ
-OleDbType, SqlDbType: kiểu dữ liệu OleDb hoặc SqlDb
-Value: Giá trị của tham số có kiểu là object (String, Integer) g ) g, ( j ị
SELECT OrderlD, CustomerlD FROM Orders WHERE CustomerlD = @CustomerID @CustomerID ParameterName có tên là @CustomerID. ASP.NET
24
-ParameterName: Tên tham số
3.3. Qui trình truy xuất một CSDL đơn giản trong ASP.NET CSDL đơn giản trong ASP NET
Create a Database Connection Create a Database Connection
Create a Database Command
Create a DataReader
Bind to a Repeater Control
ASP.NET
25
Close the Database Connection
Create a Database Connection
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data.OleDb" %>
Sub Page_Load()
Dim ConnString As String Dim ConnString As String
Dim dbconn, sql, dbcomm, dbread
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0 ;data source=" & _
Server.MapPath("./dbase/DBHuan.mdb")
dbconn = New OleDbConnection(ConnString)
dbconn.Open() db ()
O
End Sub
p
ASP.NET
26
Create a Database Command
Sub Page_Load()
Dim ConnString As String
Dim dbconn, sql, dbcomm, dbread
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0 ;data source=" & _ C ft J t OLEDB 4 0 d t id Mi St i " & "P
Server.MapPath("./dbase/DBHuan.mdb")
dbconn = New OleDbConnection(ConnString) dbconn = New OleDbConnection(ConnString)
dbconn.Open()
FROM CatPlaces sql = "SELECT * FROM CatPlaces" sql SELECT
dbcomm = New OleDbCommand(sql, dbconn)
End Sub
ASP.NET
27
Create a DataReader
Bind to a Repeater Control and Close the Database Connection
…..
dbread = dbcomm.ExecuteReader()
repCatPlaces.DataSource = dbread
repCatPlaces.DataBind()
dbread.Close() db () d Cl
dbconn.Close()
End Sub End Sub
ASP.NET
29
/f3.4. Tạo liên kết với CSDL tự động
Demo tạo kết nối và hiển thị -Demo tạo kết nối và hiển thị
ASP.NET
31
3.5. DataSet
-DataSet gần với Recordset của ADO
-Là một mô hình CSDL thu nhỏ
Các chức năng chính của DataSet:
-Làm việc với dữ liệu không liên kết -Làm việc với dữ liệu không liên kết
-Khả năng dịch chuyển, sắp sếp, tìm và lọc dữ liệu
-Cache những thay đổi
-Làm việc với XML-document
Các thuộc tính của DataSet:
-Relations: tập hợp các quan hệ DataRelation DataSet gần với Recordset của
h
h
d
ầ
l
i
i
i
l
ADO - Tables: Tập hợp các bảng của DataSet (DataColumn, DataRow, Constraint)
ASP.NET
32
Tạo đối tượng DataSet
Dim ds As New DataSet(“DataSetName")
( Q ;
ASP.NET
33
Dim strConn, strSQL As String strConn = "Provider=SQLOLEDB;Data Source=(local)\NetSDK;" & _ ) ; "Initial Catalog=Northwind;Trusted_Connection=Yes;" strSQL = "SELECT CustomerlD, CompanyName, ContactName, Phone & _ Phone " & "FROM Customers" Dim da As New 01eDbDataAdapter(strSQL, strConn) Dim ds As New DataSetQ Di d A N D S Q da.Fillfds, "Customers")
Các phương thức của DataSet
-Thêm bảng vào DataSet
Tables.Add(
-Xóa bảng ra khỏi tập hợp Tables của DataSet
Tables.Remove()
- Xóa bảng có chỉ số là
ố
ố
Tables.RemoveAt(
-Xóa tất cả các bảng ra khỏi tập hợp Tables Xóa tất cả các bảng ra khỏi tập hợp Tables
Tables.Clear()
-Kiểm tra bảng có thuộc về DataSet không
Tables.Contains(
-Xóa bỏ mọi dữ liệu trên DataSet
Clear() Cl ()
-Xóa bỏ DataSet : Dispose()
ASP.NET
34
3.6. DataAdapter
-Lấy cấu trúc và dữ liệu của các bảng trong nguồn dữ liệu về cho
DataAdapter
DataSet
TableMappings
Tables
Columns Columns
ColumnMappings ColumnMappings
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
ASP.NET
35
DataSet và cập nhật các thay đổi về nguồn dữ liệu gốc
Architecture
ASP.NET
36
TableMappings
CSDL
DataSet
TableMappings
Table <-> Employees
Employees
Table123 Table123
EmpID
EmpID <-> EmployeeID
EmployeeID
Lname
Lname <-> LastName
LastName
FName
Fname <-> FirstName
FirstName
ASP.NET
37
SELECT EmpID AS EmployeelD, LName AS LastName, FHame AS FirstName FROM Employees
TableMappings
Dim da As OleDbDataAdapter
‘khởi tạo DataAdapter
Dim TblMap As DataTableMapping Di TblM A D t T bl M i
Dim ColMap As DataColumnMapping
TblMар = da.TableMappings.Add( Table , Employees ) TblMар = da TableMappings Add("Table" "Employees")
ColMap = TblMap.ColumnMappings.Add("EmpID", "EmployeelD")
TblMap.ColumnMappings,AddC LName , LastName ) ColMap = TblMap.ColumnMappings,AddC'LName", "LastName") ColMap
ASP.NET
38
ColHap = ТЫМар,ColumnMappings.Add("FName", "FirstName")
Tạo DataAdapter
OleDbDataAdapter trong System.Data.OleDb.OleDbDataAdapter OleDbDataAdapter trong System.Data.OleDb.OleDbDataAdapter
SqlDbDataAdapter trong System.Data.OleDb.SqlDataAdapter
(cid:190)Khai báo DataAdapter từ đối tượng Connection
Dim da As New OleDbDataAdapter(SqlString,dbconn)
(cid:190)Khai báo DataAdapter từ chuỗi Connection
Dim da As New OleDbDataAdapter(SqlString,ConnString) Di d A N Ol DbD t Ad t )
(S lSt i C
St i
VD:
Dim ConnString = "Provider=Microsoft.Jet.OLEDB.4.0 ;data source=" & _
Server.MapPath("./dbase/DBHuan.mdb")
dbconn = New OleDbConnection(ConnString) dbconn.Open() SqlString = "SELECT * FROM CatPlaces"
Dim da As New OleDbDataAdapter(SqlString,dbconn) ‘ hoặc Dim da As New OleDbDataAdapter(SqlString,ConnString)
ASP.NET
39
Các chức năng của DataAdapter
-Đổ dữ liệu vào DataSet có sẵn dưới dạng các bảng với tên mạc định là Table, Table1,
Table2,…
a) Lấy dữ liệu từ nguồn về cho DataSet, DataTable qua methode Fill
(TênĐối tượngDataAdapter).Fill()
-Đổ dữ liệu vào DataTable có sẵn Đổ dữ liệu vào DataTable có sẵn
(TênĐối tượngDataAdapter).Fill()
-Đổ dữ liệu vào DataSet cho bảng
về số mẩu tin lấy về được
(TênĐối tượngDataAdapter).Fill(,)
-Chia thành từng trang Chi thà h từ
t
da.Fill(DataSet, intStartRecord, intNumRecorbs, “TênBảng")
(
) da. Fill(DataSet, O, 20, "Products")
ASP.NET
40
Các chức năng của DataAdapter
b) Lấy cấu trúc dữ liệu từ nguồn ồ ấ ấ
-Đổ cấu trúc dữ liệu vào DataSet có sẵn và trả về một tập hợp các bảng
được thêm vào DataSet được thêm vào DataSet
da.FillSchema(
-Đổ cấu trúc dữ liệu vào DataTable có sẵn và trả về DataTable Đổ cấu trúc dữ liệu vào DataTable có sẵn và trả về DataTable
da.FillSchema(
-Đổ cấu trúc dữ liệu vào DataSet cho bảng
da.FillSchema(
-Phương thức này có tham số bắt buộc là SchemaType có 2 giá trị
Mapped và Source xác định có sử dụng các TableMappings cho các
ASP.NET
41
cấu trúc đưa vào DataSet hay không.
Các chức năng của DataAdapter
c) Tạo bộ lệnh cập nhật cho DataAdapter
Dựa vào nội dung lệnh SelectCommand dùng đối tượng
CommandBuilder để tự động tạo các lệnh còn lại. CommandBuilder để tự động tạo các lệnh còn lại
System.Data.OleDb.OleDbCommandBuilder
System.Data.OleDb.SqlCommandBuilder System.Data.OleDb.SqlCommandBuilder
Dim Update As New
d) Cập nhật dữ liệu về nguồn p g )
-Update(
-Update(
ASP.NET
42
-Update(
3.7. DataTable
iề S t
Th ộ tê Thuộc tên miền System.Data.DataTable D t D t T bl Cách khai báo:
+ Dim BangX As New DataTable()
+ Dim BangX As New DataTable(
ChildRelations
Trả về tập hợp các quan hệ, trong đó bảng đóng vai trò bảng cha
Columns
Trả về các cột trong bảng (thuộc DataColumn)
Constraints
Trả về các ràng buộc trong bảng
DataSet
Trả về DataSet chứa bảng
DefaultView
Trả về DataView phát sinh từ bảng
ParentRelations ParentRelations
Tập hợp các quan hệ, trong đó bảng đóng vai trò bảng con Tập hợp các quan hệ trong đó bảng đóng vai trò bảng con
PrimaryKey
Mảng các cột chức năng làm khóa chính của bảng
Rows
Trả về tập hợp các dòng dữ liệu của bảng
TableName
Tên DataTable
ASP.NET
43
Các thuộc tính chính:
Tập hợp Rows
ì ậ
á dò
dữ liệ
là tậ h
hiế đế dò
i th
R
Rows là tập hợp các dòng dữ liệu của bảng vì vậy mọi tham chiếu đến dòng
ủ bả
đều thông qua tập hợp này
Các chức năng chính của Rows:
-Rows.Count
Rows Count
-Rows.Item(
Rows(
- Thêm dòng vào bảng
+ Dim NewRow As DataRow
+ Dim NewRow As DataRow
+ NewRow =
Ro s Add(
ASP.NET
44
Tập hợp Columns
Tương tự như Rows, Columns là tập hợp các cột dữ liệu của T là tậ h h R ủ á t
ột dữ liệ C l bảng vì vậy mọi tham chiếu đến cột đều thông qua tập hợp này
-Columns.Count
-Columns.Item(
-Columns.Item(
-Columns(
ASP.NET
45
-Columns(
3.8. DataView
Cung cấp các phương pháp thuận tiện cho việc liên kết dữ lịêu với các ế ấ
điều khiển, sắp xếp,…
-Tạo DataView Tạo DataView
+ New DataView()
+ New DataView() New DataView( bảng )
+ New DataView(, xếp>, VD: Dim tbl As New DataTable(“bảng") Dim vue As DataView vue = New DataView() ASP.NET 46 vue.Table = tbl hoặc vue = New DataView(tbl) AllowDelete cho phép thao tác xóa dòng trên DataView AllowEdit Cho phép thao tác sửa đổi trên DataView AllowNew Cho phép thao tác thêm mới bằng AddNew g p p Count Số mẩu tin trên DataView Item Trả về dòng dữ liệu trên bảng theo tham số truyền vào RowFilter
RowFilter Biểu thức lọc
Biểu thức lọc RowStateFilter Trạng thái dòng dữ liệu trên DataView + Added: dòng mới thêm nhưng chưa cập nhật
+CurrentRows: tất cả các dòng không thay đổi, mới và đã
+C rrentRo s tất cả các dòng không tha đổi mới à đã
thay đổi
+ Deleted: dòng đánh dấu hủy
+ ModifiedCurrent
+ ModifiedCurrent
+ ModifiedOriginal
+ None, OriginalRows,Unchanged Sort
Sort sắp xếp dữ liệu trên DataView
sắp xếp dữ liệu trên DataView Table Tên bảng ASP.NET 47Các thuộc tính của DataView