Trong lĩnh vực Công Nghệ Thông Tin nói riêng, yêu cầu quan trọng nhất của người học đó chính là thực hành. Có thực hành thì người học mới có thể tự mình lĩnh hội và hiểu biết sâu sắc với lý thuyết. Với ngành mạng máy tính, nhu cầu thực hành được đặt lên hàng đầu. Tuy nhiên, trong điều kiện còn thiếu thốn về trang bị như hiện nay, người học đặc biệt là sinh viên ít có điều kiện thực hành. Đặc biệt là với các thiết bị đắt tiền như Router, Switch chuyên dụng
Trang 1LHU
http://lhu.edu.vn
1
LẬP TRÌNH WEB ASP.NET
Ts Vũ Đức Lung
Ks Phan Hữu Tiếp
Xử Lý Dữ Liệu Với ADO.NET
Chương 4:
Trang 2Nội dung chính
Giới thiệu về ADO.NET
Các đối tượng trong ADO.NET
Điều khiển liên kết dữ liệu
Trang 3http:// lhu.edu.vn
3
Trang 4Giới thiệu về ADO.NET
Ứng dụng cần CSDL: người dùng, ứng dụng, file,…
CSDL quan hệ => lưu trữ theo hệ quản trị CSDL: Access, MS SQL Server, Oracle
Người thiết kế quan tâm:
Lưu trữ dữ liệu tập trung
Đảm bảo toàn vẹn dữ liệu
Khả năng truy xuất đồng thời
Thời gian hồi đáp ngắn
Bảo mật dữ liệu
Trao đổi giữa các hệ thống khác nhau
Trang 5http:// lhu.edu.vn
5
Giới thiệu về 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
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 nguyên trên Database server
Khả năng xử lý dữ liệu dạng chuẩn XML =>làm việc với nhiều ứng dụng khác
Trang 6Giới thiệu về ADO.NET
Trang 7http:// lhu.edu.vn
7
Giới thiệu về 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 SELECT trong Command, để cập nhật data dùng INSERT, UPDATE, DELETE
Trang 8Giới thiệu về ADO.NET
Trang 9 Dataset cũng là đối tượng mới, không chỉ là dữ liệu, Dataset còn
có thể coi là một bản sao gọn nhẹ của CSDL trong bộ nhớ với nhiều bảng và có các mối quan hệ Dataset hỗ trợ XML thông qua đối tượng XMLDataDocument
DataAdapter là đối tượng kết nối giữa DataSet và CSDL Nó gồm Connection và Commmand, để cung cấp dữ liệu cho Dataset, cũng như cập nhật dữ liệu từ DataSet xuống CSDL
Trang 10Các thành phần trong ADO.NET
Trang 11 Nói 01 cách khác DataSet là CSDL thu nhỏ từ CSDL lớn
Trong Dataset sẽ chứa các bảng là thông tin mà chúng ta cần lấy.Trong DataSet sẽ có nhiều DataTable và các mối quan hệ giữa chúng đại diện bởi các DataRelation
Dataset giống như là hình ảnh về CSDL trong bộ nhớ
Trang 12Các thành phần trong ADO.NET
Lợi ích trong việc sử dụng 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 Marked Language)
Trang 13http:// lhu.edu.vn
13
Các thành phần trong ADO.NET
DataTable:
DataTable là 01 thành phần trong Dataset
DataTable chứa dữ liệu của 01 bảng trong Dataset và thuộc lớp DataTable DataTable bao gồm
• Tập hợp Columns thuôc lớp DataColumnCollection trong đó mỗi cột
là một đối tượng thuộc lớp DataColumn
• Tập hợp Rows thuôc lớp DataRowCollection trong đó mỗi cột là một đối tượng thuộc lớp DataRow
Trang 14Các thành phần trong ADO.NET
DataRelation:
Dataset bao gồm tập hợp các table đại diện bởi các đối tượng DataTable và quan hệ giữa các table đó đại diện bởi các đối tượng DataRelation
DataRelation, người dùng có thể:
• Định nghĩa mối quan hệ giữa các bảng
• Duyệt dữ liệu trong các bảng theo mối quan hệ Master – Detail
Một đối tượng kiểu DataRelation bao gồm các thông tin:
• Tên của Parent Table và Child Table
• Các column trong DataRelation đại diện cho PrimaryKey trong Parent và ForeignKey trong Child Table
Trang 15 Ví dụ: trong parent table có 10 dòng, mỗi dòng trong Parent table
có 10 dòng con trong Child table
Cách cũ: dùng 01 truy vấn kết hợp hai bảng để lấy 1 lần 100 mẫu tin hay dùng 02 RecordSet, mỗi lần RecordSet Master thay đổi mẫu tin hiện hành thì mở lại RecordSet Detail
Trang 16Các thành phần trong ADO.NET
DataRelation:
Khuyết điểm: dữ liệu bị lấy thừa vì không chắc người dùng sẽ đi xem hết 100 mẫu tin đã lấy và khó thao tác thêm, sửa, xóa, Với cách thứ 2, dữ liệu chỉ lấy vừa đủ nhưng chậm hơn vì mỗi lần thay đổi Master lại phải truy vấn dữ liệu cho Detail
Phương pháp mới: Chỉ cần lấy dữ liệu 01 lần duy nhất nhưng dữ liệu vẫn nằm trong các bảng, dễ dàng thao tác xử
lý
Trang 18Các thành phần trong ADO.NET
DataView:
DataView gần giống với khái niệm RecordSet của ADO Trên một DataTable có thể tạo nhiều DataView với các điều kiện lọc, sắp xếp dữ liệu khác nhau Trên DataView ta có thể xem hay thay đổi giá trị các mẫu tin
DataView của ADO.NET có nhiệm vụ kết nối với các control của WinForm và Web Form
Trang 19http:// lhu.edu.vn
19
Điểm nổi bật trong ADO.NET
Tương tác giữa nhiều hệ thống khác nhau (Interoperability)
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 (Performance)
Cơ chế làm việc ở ADO.NET:
Xử dụng dữ liệu ở dạng disconnect data
Client tạo kết nối với server để lấy dữ liệu
Server gửi dữ liệu về cho Client
Client ngắt kết nối với Server
Khi cần cập nhật dữ liệu, kết nối giữa Client và Server được phục hồi
Thời gian kết nối giữa Client và Server không còn lâu như trước
Trang 20Các đối tượng trong ADO.NET
Khai báo và sử dụng không gian tên (namespace)
<%@ Import Namespace="System.Data.OleDb" %>
- Thiết kế tối ưu cho CSDL SQL server
Trang 21 Cả OleDBConnection và SQLConnection đều có các thuộc tính
và phương thức giống nhau như ConnectionString , State hay Open
- Các Provider mà OLEDB và SQL có thể kết nối dữ liệu:
SQLOLEDB: OLEDB Provider của Microsoft cho SQL Server
MSDAORA: OLEDB Provider của Microsoft cho Oracle
JOLT: OLEDB Provider cho Jet
Trang 22Đối tượng Connection
Connection String:Cung cấp thông tin cần thiết cho kết nối
Trước khi thực hiện kết nối cần thông báo các thông tin cần thiết cho Connection thông qua thuộc tính Connection String Cách khai báo thay đổi tùy thuộc vào Data Provider
Phụ thuộc vào Data Provider
OleDB Provider có thể gồm các thành phần:
Trang 23http:// lhu.edu.vn
23
Đối tượng Connection
Ví dụ 1: Tạo connection đến CSDL Microsoft Access
Ví dụ 2: Tạo connection đến CSDL SQL Server
Trang 24Đối tượng Connection
Trang 25http:// lhu.edu.vn
25
Đối tượng Connection
Ví dụ 3: Tạo connection đến CSDL SQL Server
Trang 26Đối tượng Connection
Ví dụ 4: Tạo connection đến CSDL SQL Server
Trang 27http:// lhu.edu.vn
27
CÁC ĐỐI TƯỢNG TRONG ADO.NET
I.CONNECTION:
Các bước thực hiện tiến hành kết nối
Bước 1: tạo 1 file có đuôi UDL Nhấp đúp vào file để kích hoạt
Bước 2: 01 hộp thoại xuất hiện:
Chọn mục:
Microsoft OLEDB Provider for SQL Server
Trong Tab Provider
Trang 28CÁC ĐỐI TƯỢNG TRONG ADO.NET
Trang 29Đăng nhập bằng username và password
Provider=SQLOLEDB.1;Persist Security Info=False;User
ID=etest;Initial Catalog=ETEST;Data Source=GOATM
Trang 30CÁC ĐỐI TƯỢNG TRONG ADO.NET
Trang 31http:// lhu.edu.vn
31
Đối tượng Connection
Các phương thức cần chú ý trong Connection
Close: đóng kết nối với nguồn dữ liệu Sử dụng phương thức này để đóng Connection đang mở
Open: Thực hiện kết nối với các thông tin đã khai báo trong ConnectionString
Dispose: Xóa mọi tài nguyên liên quan đến Connection trên vùng nhớ
CreateCommand: Tạo và trả về 01 Command dựa vào Connection hiện hành
Ví dụ:
ConnDB.Open()
ConnDB.Close()
ConnDB.Dispose()
Trang 32Đối tượng Connection
Một số đặc tính quan trọng khác của OleDbConnection
Đặc tính Dạng data Ý nghĩa
Connection
Timeout
Int32 khoảng thời gian cố gắng tạo liên
kết VD: ConnString= "Provider….;
Connect Tirneout=11"
Database String Trả về tên CSDL đã kết nối
ServerVersi String Trả về version của nguồn CSDL
Trang 33http:// lhu.edu.vn
33
Đối tượng Command
Sau khi tạo kết nối đến nguồn dữ liệu, mọi thao tác trên nguồn
dữ liệu đó đều được thực hiện thông qua Command Tùy theo loại Connection, đối tượng Command thuộc tên miền sau:
Trang 34Đố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
• MyCom = New OleDbCommand(ConnString,ConnDB)
Trang 35http:// lhu.edu.vn
35
Đối tượng Command
II.COMMAND:
Các thuộc tính của Command:
CommandText: lệnh SQL hay tên Procedure muốn thực hiện
trên nguồn dữ liệu (đọc ghi)
CommandType:giá trị cho biết nội dung CommandText là gì
với các giá trị như sau:
Text: (mặc định)một câu lệnh SQL
StoreProcedure: tên 01 thủ tục nội
TableDirect: khi CommandType có giá trị này, CommandText là tên của 01 bảng Khi Command thực hiện sẽ trả về đủ các dòng
và cột ( chỉ dùng cho OleDbCommand)
Connection: Đối tượng Connection sử dụng cho Command
Parameters: Tập hợp các tham số dùng trong Command
Trang 36Đối tượng Command
Các phương thức thực hiện Command
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ề
Trang 37http:// lhu.edu.vn
37
Đối tượng Command
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()
ExecuteScalar: phương thức này thực hiện lệnh của Command và chỉ trả về giá trị của cột đầu tiên hay dòng đầu tiên Chúng ta thường gọi phương thức này khi muốn Command thực hiện các lệnh tính toán Sum, COUNT, AVG… trên nguồn dữ liệu ngay lúc thực thi Cú pháp như sau:
MyCom.ExecuteScalar()
Trang 38Đối tượng Command
II.Paramater:
- Lệnh SQL trong CommandText có thể sử dụng các dấu ? thay thế
cho trị không xác định và khi thực hiện sẽ dùng đối tượng Parameter để truyền giá trị vào các dấu ? Tùy theo Command, Paramater sẽ khai báo từ lớp OleDBParameter hay SQLParameter
Cú pháp khai báo:
Dim <tên parameter> as new OleDbParameter | SqlParameter
Dim <tên parameter> as new OleDbParameter | SqlParameter(<tên>) Dim <tên parameter> as new OleDbParameter | SqlParameter(<tên>,
Trang 39http:// lhu.edu.vn
39
Đối tượng Command
Paramater:
Các thuộc tính của Parameter:
Direction: giá trị cho biết loại tham số với các giá trị sau: (đọc ghi)
input(mặc định): loại tham số đầu vào
InputOutput: loại tham số vào và ra
Output: loại tham số ra
ReturnValue: loại tham số nhận giá trị trả về của 01 thủ tục nội,
một hàm hay một hàm do người dùng định nghĩa
OledbType / SqlDBType :kiểu dữ liệu Oledb hay SqlDB của tham
số(đọc ghi)
ParameterName: tên tham số (đọc ghhi)
Value: giá trị của tham số (đọc ghi)
Trang 40Đối tượng Command
Paramater:
Ví dụ 1:
cmd.CommandText=“select * from CTNHAP where sopn=@sp”
Dim par as SqlParameter=cmd.CreateParameter()
Par.Parametername=“@sp”
Par.Value=“PN01”
cmd.Parameter.Add(Par)
Trang 41cmd.CommandText=“select * from CTNHAP where sopn=@sp and mavtu=@vt”
Dim ts1 as SqlClient.Sqlparameter=cmd.parameters.Add(“@vt ”,sqlDbType.Char,4) Ts1.Value=“S001”
Dim ts2 as SqlClient.Sqlparameter=cmd.parameters.Add(“@s p”,sqlDbType.Char,4) Ts2.Value=“PN01”
Chú thích: thứ tự đưa tham số vào tùy ý vì phải chỉ đúng tên tham số trong SQL
Trang 42trong ASP.NET
Trang 43http:// lhu.edu.vn
43
Ví dụ: Create a Database Connection
Trang 44Ví dụ: Create a Database Command
Trang 45http:// lhu.edu.vn
45
Ví dụ: Create a DataReader
Trang 46Close the Database Connection
Trang 47http:// lhu.edu.vn
47
Repeater Control
Trang 48Tạo kết nối với CSDL động
Demo tạo kết nối và hiển thị
DataSet
DataAdapter
DataTable
DataView
Trang 49http:// lhu.edu.vn
49
DataSet
hệ(DataRelation) và các ràng buộc ( Contraint)
DataSet thuộc tên miền sau: System.Data.DataSet
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
Khai báo Dataset
Cú pháp: New System.Data.Dataset()
Hoặc New system.Data.DataSet(<tên>) với <tên>: tên của DataSet
Cách khác: Ta có thể dùng công cụ DataSet trong hộp thoại ToolBox
Trang 50Ví dụ: Tạo đối tượng DataSet
Trang 51http:// lhu.edu.vn
51
DataSet
Các thuộc tính của DataSet:
DataSetName: Tên của DataSet (đọc ghi)
HasErrors: giá trị cho biết lỗi xảy ra trên 01 trong các bảng của DataSet: True/False ( chỉ đọc)
Relations: tập hợp các quan hệ(DataRelation) một nhiều của Dataset ( chỉ đọc)
Tables: Tập hợp các bảng (DataTable) của DataSet (chỉ đọc)
Trang 52Các phương thức của Dataset
Thêm một bảng vào Dataset
Muốn đưa 01 bảng DataTable vào Dataset, chúng ta dùng phương thức Add của tập hợp Tables:
Cú pháp:
• Tables.Add(): bảng được tạo có tên table1, table2,…
• Tables.Add(<tên bảng>): 01 bảng mới được tạo thành trong Dataset có tên là <tên bảng>
Chú ý: tên bảng có phân biệt chữ hoa, chữ thường
Trang 53http:// lhu.edu.vn
53
Các phương thức của Dataset
Xóa bảng ra khỏi dataset:
Tables.Remove(<bảng>): xóa bảng ra khỏi tập hợp Table
Xóa bảng có chỉ số là <chỉ số> ra khỏi tập hợp Tables: Tables.RemoveAt(<chỉ số>)
Xóa tất cả các bảng ra khỏi danh sách: Tables.Clear()
Lệnh kiểm tra Bảng có thể xóa hay không? :
Tables.CanRemove(<bảng>):
• Trả về True: có thể xóa
• False: không thể xóa vì đang xử dụng
Trang 54Các phương thức của Dataset
Kiểm tra bảng có thuộc về Dataset hay không ?
Trang 55http:// lhu.edu.vn
55
Các phương thức của Dataset
Để tạo 01 quan hệ giữa hai bảng trong DataSet:
Chúng ta sử dụng cú pháp Add của tập hợp Relation trong Dataset
với các cú pháp sau:
Relations.Add(<tên quan hệ>,<mảng DataColumn trên bảng cha>,
<mảng DataColumn trên bảng con>)
Relations.Add(<tên quan hệ>,< DataColumn trên bảng cha>,<
DataColumn trên bảng con>, < tạo ràng buộc>)
Trang 56http:// lhu.edu.vn
56
Các phương thức của Dataset
Xóa quan hệ khỏi DataSet: ta dùng phương thức sau:
Relations.Remove(<quan hệ>)
Xóa quan hệ ra khỏi tập hợp Relations của Dataset
Relations.Remove(< tên quan hệ>)
Xóa quan hệ < tên quan hệ> ra khỏi tập hợp Relations của
Trang 58DataAdapter
DataAdapter là một bộ gồm bốn đối tượng Command:
SelectCommand: cho phép lấy thông tin từ nguồn dữ liệu về
InsertCommand: cho phép chèn thêm dữ liệu vào bảng trong nguồn
dữ liệu
UpdateCommand: cho phép sửa đổi dữ liệu trog nguồn dữ liệu nguồn
DeleteCommand: cho phép hủy bỏ dữ liệu trên bảng trong nguồn dữ liệu
Ta cầ hiểu rõ nội dung lệnh truy vấ cho SelectCommand, nội dung các đối tượng còn lại có thể sử dụng đối tượng thích hợp để tự động phát sinh hay chỉ rõ lệnh cho từng đối tượng
Trang 59http:// lhu.edu.vn
59
DataAdapter
Trang 60DataAdapter
TableMappings
Trang 61http:// lhu.edu.vn
61
DataAdapter
TableMappings
Trang 62Tạo DataAdapter
Trang 63http:// lhu.edu.vn
63
Các chức năng của DataAdapter
Lấy dữ liệu từ nguồn về cho DataSet, DataTable qua method Fill
Trang 64Các chức năng của DataAdapter
Lấy cấu trúc dữ liệu từ nguồn
Trang 65http:// lhu.edu.vn
65
Các chức năng của DataAdapter
Tạo bộ lệnh cập nhật cho DataAdapter