5.1.3. Kết nối đến cơ sở dữ liệu
Việc kết nối đến CSDL dựa trên mô hình Client - Server. CSDL được trên
Server và chương trình ứng dụng được đặt ở máy người dùng (Client). Quy trình
để một Client kết nối đến Server được thực hiện theo các bước sau:
- Client gửi chuỗi kết nối chứa các thông tin về Client và CSDL muốn kết
nối đến Server.
- Server kiểm tra thông tin:
+ Nếu hợp lệ thì cho phép Client quyền truy cập CSDL tương ứng.
Việc truy cập cũng được thực hiện bằng các câu lệnh SQL.
+ Nếu không hợp lệ thì không cấp quyền truy cập.
Để truy cập đến một CSDL ta thực hiện theo các bước:
Bước 1: tạo đối tượng Connection
- Xác định chuỗi kết nối đến CSDL cần truy cập. Giả sử biến được đặt tên
là ChuoiKetNoi.
ChuoiKetNoi = @"Data Source=XP-VANTOAN\SQLEXPRESS;Initial
Catalog=QLSV;Integrated Security=True";
- Tạo đối tượng Connection. Giả sử biến được đặt tên là KN. Như vậy, ta
có thể tạo đối tượng Connection như sau.
SqlConnection KN = new SqlConnection(ChuoiKetNoi);
Bước 2: truy cập dữ liệu
Để truy cập dữ liệu với CSDL MS SQL Server ta thực hiện theo trình tự:
- Mở kết nối:
KN.Open();
- Thực hiện các câu lệnh SQL.
- Đóng kết nối:
KN.Close();Trang 70
Để kiểm tra kết nối có thành công hay không, ta có thể xây dựng phương
thức KiemTraKN như sau:
Public static bool KiemTraKN()
{
try
{
KN.Open();
KN.Close();
return true;
}
catch
{
return false;
}
}
Phương thức KiemTraKN() sẽ trả về true khi kết nối thành công, ngược
lại thì kết nối không thành công.
Người ta thường xây dựng thuộc tính Connection để lấy đối tượng
Connection cụ thể làm nhiệm vụ kết nối. Trong các thao tác cập nhật dữ liệu, đối
tượng làm nhiệm vụ kết nối được sử dụng thường xuyên nên thuộc tính này là
rất hữu ích.
48 trang |
Chia sẻ: thanhle95 | Lượt xem: 567 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình C# (Phần II), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Trang 56
Chương 4:
Quản lý dữ liệu với Microsoft SQL Server
Thời lượng: 8 tiết
Mục tiêu:
- Hiểu được các đối tượng trong hệ quản trị CSDL Microsoft SQL Server,
- Viết được các câu lệnh SQL theo yêu cầu,
- Tạo, quản lý được một CSDL trong Microsoft SQL Server theo yêu cầu.
4.1. Các khái niệm về cơ sở dữ liệu trong MS SQL Server
4.1.1. Các khái niệm về cơ sở dữ liệu
a) Cơ sở dữ liệu:
Một cơ sở dữ liệu (CSDL - Database) là một <có
liên quan với nhau> được lưu trữ trong máy tính theo một quy định nhất định
nhằm phục vụ cho nào đó.
Ví dụ: CSDL phục vụ cho việc quản lý các chuyến bay của một hãng
hàng không cung cấp các thông tin vế số hiệu chuyến bay, nơi xuất phát, nơi
đến, số chỗ ngồi, ngày bay của tất cả các chuyến bay trong năm; CSDL phục vụ
cho công tác quản lý đào tạo trong trường chứa các dữ liệu phản ánh thông tin
về học sinh, giáo viên, môn học, phòng học,...
b) Hệ quản trị cơ sở dữ liệu:
Một hệ quản trị cơ sở dữ liệu (HQT CSDL - Database Management
System) là phần mềm cho phép người dùng và cơ sở
dữ liệu. Đồng thời HQT CSDL cung cấp một môi trường thuận lợi cho việc
thông tin được lưu trữ trong cơ sở dữ liệu.
Một số hệ quản trị cơ sở dữ liệu: Microsoft (MS) Visual Foxpro, MS
Access, MS SQL Server, DB2, Oracle,...
c) Hệ cơ sở dữ liệu:
Một hệ cơ sở dữ liệu (Database System) là một hệ thống phần mềm nhằm
quản lý CSDL của một hệ thống thông tin cụ thể nào đó.
Như vậy các thành phần bên trong một hệ CSDL gồm có: chương trình,
CSDL, HQT CSDL. Để vận hành hệ CSDL cần có một số lượng con người.
d) Mô hình dữ liệu:
Nền tảng của cấu trúc cơ sở dữ liệu là mô hình dữ liệu. Mô hình dữ liệu
Trang 57
được định nghĩa là một sưu tập các công cụ khái niệm dùng cho việc mô tả dữ
liệu, các mối quan hệ dữ liệu, các ngữ nghĩa dữ liệu và các ràng buộc dữ liệu.
Các mô hình dữ liệu phổ biến là: mạng, phân cấp, quan hệ, ER, hướng đối
tượng.
e) Mô hình dữ liệu quan hệ:
Mô hình dữ liệu quan hệ là mô hình dữ liệu trong đó tất cả dữ liệu được tổ
chức trong các bảng (Table) có mối quan hệ với nhau. Mỗi bảng bao gồm các
cột (Field – trường, thuộc tính), các dòng (Record – bản ghi, bộ).
4.1.2. Khái niệm về cơ sở dữ liệu trong MS SQL Server
MS SQL Server là HQT CSDL được phát triển để tạo và quản lý CSDL
quan hệ. Một CSDL trong MS SQL Server chứa các đối tượng: Tables, Views,
Procedures, Tables trong MS SQL Server gồm các Table có quan hệ với nhau.
Sau đây sẽ trình bày các khái niệm liên quan đến Tables.
a) Bảng (Table):
Bảng bao gồm:
- Tên của bảng: xác định duy nhất;
- Cấu trúc của bảng: tập hợp các cột;
- Dữ liệu của bảng: tập hợp các dòng;
b) Khóa chính của bảng (Primary Key):
Mỗi bảng phải có một cột (hoặc tập các cột) mà giá trị của nó xác định
duy nhất định duy nhất một dòng trong tập hợp các dòng của bảng. Cột đó (tập
các cột đó) được chọn làm khóa chính.
c) Mối quan hệ (Relationship):
Mối quan hệ của bảng được thể hiện thông qua sự ràng buộc giá trị dữ
liệu xuất hiện trong bảng này phải có xuất hiện trong bảng kia. MS SQL Server
chỉ hỗ trợ mối quan hệ 1-1 và 1-n.
d) Khóa ngoài (Foreign Key):
Một cột (hoặc một tập các cột) trong một bảng mà giá trị của nó được xác
định từ khóa chính của một bảng khác được gọi là khóa ngoài.
4.2. Ngôn ngữ SQL
SQL (Structured Query Language) là ngôn ngữ được sử dụng cho các
HQT CSDL. Ngôn ngữ SQL chuẩn được đưa ra bởi ANSI (Amerrican National
Standards Institude) và ISO (International Standards Organnization) với phiên
bản mới nhất hiện nay là phiên bản SQL-92 (phiên bản được đưa ra vào năm
1992). Mặc dù có nhiều ngôn ngữ khác nhau được đưa ra cho các HQT CSDL
Trang 58
quan hệ, SQL vẫn là ngôn ngữ được sử dụng rộng rãi hiện nay trong nhiều hệ
thống CSDL thương mại như: Oracle, SQL Server, DB2, Microsoft Access,
Thông qua SQL, người sử dụng có thể dễ dàng định nghĩa được dữ liệu, thao tác
với dữ liệu, Mặt khác, đây là ngôn ngữ có tính khai báo nên nó dễ sử dụng và
cũng vì vậy mà trở nên phổ biến.
4.2.1. Các câu lệnh SQL
Câu lệnh Chức năng
a) Thao tác dữ liệu
SELECT Truy xuất dữ liệu
INSERT Bổ sung dữ liệu
UPDATE Cập nhật dữ liệu
DELETE Xóa dữ liệu
TRUNCATE Xóa toàn bộ dữ liệu trong bảng
b) Định nghĩa dữ liệu
CREATE TABLE Tạo bảng
DROP TABLE Xóa bảng
ALTER TABLE Sửa cấu trúc bảng
CREATE FUNCTION Tạo hàm (do người sử dụng định nghĩa)
ALTER FUNCTION Sửa đổi hàm
DROP FUNCTION Xóa hàm
CREATE TRIGGER Tạo trigger
ALTER TRIGGER Sửa trigger
DROP TRIGGER Xóa trigger
4.2.2. Kiểu dữ liệu
Trang 59
Tên kiểu Mô tả
CHAR (n) Kiểu chuỗi với độ dài cố định
NCHAR (n) Kiếu chuỗi với độ dài cố định hỗ trợ UNICODE
VARCHAR (n) Kiểu chuỗi với độ dài chính xác
NVARCHAR (n) Kiểu chuỗi với độ dài chính xác hỗ trợ UNICODE
INTEGER Số nguyên có giá trị từ -231 đến 231 - 1
INT Như kiểu Integer
TINYTINT Số nguyên có giá trị từ 0 đến 255
SMALLINT Số nguyên có giá trị từ -215 đến 215 – 1
BIGINT Số nguyên có giá trị từ -263 đến 263 – 1
NUMERIC (p,s) Kiểu số với độ chính xác cố định
DECIMAL (p,s) Tương tự kiểu Numeric
FLOAT Số thực có giá trị từ -1.79E+308 đến 1.79E+308
REAL Số thực có giá trị từ -3.40E + 38 đến 3.40E + 38
MONEY Kiểu tiền tệ
BIT Kiểu bit (có giá trị 0 hoặc 1)
DATETIME Kiểu ngày giờ (chính xác đến phần trăm của giây)
SMALLDATETIME Kiểu ngày giờ (chính xác đến phút)
BINARY Dữ liệu nhị phân với độ dài cố định (tối đa 8000
bytes)
VARBINARY Dữ liệu nhị phân với độ dài chính xác (tối đa 8000
bytes)
IMAGE Dữ liệu nhị phân với độ dài chính xác (<=
Trang 60
2,147,483,647 bytes)
TEXT Dữ liệu kiếu chuỗi với độ dài lớn (tối đa
2,147,483,647 ký tự)
NTEXT Dữ liệu kiếu chuỗi với độ dài lớn và hỗ trợ
UNICODE (tối đa 1,073,741,823 ký tự)
4.2.3. Toán tử
Toán tử Ý nghĩa
a) Logic:
AND / OR Và / Hoặc
b) So sánh:
= Bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
< Nhỏ hơn hoặc bằng
Khác
!> Không lớn hơn
!< Không nhỏ hơn
c) Danh sách:
IN Nằm trong danh sách
NOT IN Không nằm trong danh sách
d) Giới hạn dữ liệu:
BETWEEN Giá trị BETWEEN a AND b nghĩa là (a ≤ Giá trị ≤ b)
Trang 61
NOT BETWEEN Giá trị NOT BETWEEN a AND b nghĩa là (Giá_trị <
a) AND (Giá trị > b)
LIKE Mô tả khuôn dạng dữ liệu cần tìm kiếm có sử dụng ký
tự đại diện:
% : Chuỗi ký tự bất kỳ
_ : Một ký tự bất kỳ
[] : Ký tự bất kỳ trong giới hạn được chỉ định
[^] : Ký tự bất kỳ không nằm trong giới hạn được chỉ
định
4.2.4. Một số hàm thường dùng
Tên hàm Công dụng
a) Ngày (Date: ngày/tháng/năm):
GetDate() Lấy ngày hiện tại
Day(Date) Lấy ngày trong tháng của một ngày
Month(Date) Lấy tháng trong năm của một ngày
Year(Date) Lấy năm của một ngày
b) Chuỗi (string: chuỗi; m, n: độ dài):
Left(string, n) Trích từ chuỗi string n ký tự từ trái sang
Right(string, n) Trích từ chuỗi string n ký tự từ phải sang
Substring(string, m, n) Trích từ chuỗi string n ký tự từ vị trí m
Ltrim(string) Cắt bỏ khoảng trắng thừa bên trái chuỗi string
Rtrim(string) Cắt bỏ khoảng trắng thừa bên phải chuỗi string
Len(string) Độ dài chuỗi string
Trang 62
4.2.5. Các câu lệnh SQL thường dùng
Để thuận tiện cho việc minh họa các lệnh SQL, bài giảng đưa ra CSDL
mẫu như Hình 4-1:
Hình 4-1 Mô hình dữ liệu mẫu
a) Câu lệnh Insert:
Cú pháp:
INSERT INTO
VALUES (danh sách giá trị)
Ví dụ: Bổ sung thêm một sinh viên vào bảng SINHVIEN:
INSERT INTO [SINHVIEN]
VALUES („SV010‟, ‟Nguyễn Văn A‟, ‟12/02/1992‟, ‟Sơn
Tịnh‟, ‟L1001‟)
Trong trường hợp chỉ bổ sung dữ liệu cho một số trường, ta phải chỉ định
tên trường sau tên bảng:
INSERT INTO (danh sách trường)
VALUES (danh sách giá trị)
Ví dụ: Bổ sung thêm một sinh viên vào bảng SINHVIEN:
INSERT INTO [SINHVIEN]([masv], [tensv],
[ngaysinh],[quequan])
VALUES („SV011‟,‟Trần Thanh B‟,‟22/11/1992‟,‟Sơn Hà‟)
b) Câu lệnh Update:
Cú pháp:
UPDATE
SET =
LOP
# malop
tenlop
tengvcn
magvcn
SINHVIEN
# masv
tensv
ngaysinh
quequan
malop
Trang 63
[,, = ]
[FROM ]
[WHERE ]
Ví dụ: Sửa lại quê quán của sinh viên có mã là “SV011” thành “Bình
Sơn”:
UPDATE [SINHVIEN]
SET [quequan]=‟Bình Sơn‟
WHERE [masv]=‟SV011‟
c) Câu lệnh Delete:
Cú pháp:
DELETE FROM
[FROM ]
[WHERE ]
Ví dụ: Xóa các sinh viên có mã là “SV011”:
DELETE FROM [SINHVIEN]
WHERE ([masv]=‟SV011‟)
d) Câu lệnh Select:
Cú pháp:
SELECT
FROM
[WHERE ]
[GROUP BY
[HAVING ]]
[ORDER BY ]
Trong đó:
- Mệnh đề SELECT: danh sách trường gồm: tên các trường trong các
bảng trong mệnh đề FROM, tên các trường mới, Giá trị của trường mới có
thể được tạo thành bằng các biểu thức, hàm được xây dựng sẵn.
- Mệnh đề FROM: danh sách các bảng là tên các bảng. Có thể dùng bí
danh (As) cho bảng.
- Mệnh đề WHERE: điều kiện lọc
- Mệnh đề GROUP BY: dùng để nhóm các bảng ghi theo một số trường
nào đó. Kết quả có thể được lọc bởi mệnh đề HAVING BY.
Trang 64
- Mệnh đề ORDER BY: sắp xếp kết quả theo các trường
Ví dụ: Câu lệnh lấy danh sách magv, tengv của các giáo viên:
SELECT [magv],[tengv]
FROM [GIAOVIEN]
Ví dụ: Câu lệnh lấy danh sách magv, tengv, ngaysinh, trinhdo của các
giáo viên:
SELECT *
FROM [GIAOVIEN]
Ví dụ: Câu lệnh lấy danh sách masv, tensv, ngaysinh, quequan, tenlop của
các sinh viên:
SELECT [masv], [tensv], [tensv],
[ngaysinh],[quequan], [tenlop]
FROM ([LOP] INNER JOIN [SINHVIEN] ON [LOP].[malop]
=[SINHVIEN].[malop])
Ví dụ: Câu lệnh lấy danh sách masv, tensv của các sinh viên có quê quán
tại “Sơn Tịnh”:
SELECT [masv],[tensv]
FROM [LOP]
WHERE ([quequan]=‟Sơn Tịnh‟)
Ví dụ: Câu lệnh lấy danh sách masv, tensv của các sinh viên sinh năm
1994 và có quê ở “Sơn Hà”:
SELECT [masv],[tensv]
FROM [SINHVIEN]
WHERE (Year([ngaysinh])=1994)And([quequan]=‟Sơn
Hà‟)
Ví dụ: Câu lệnh lấy danh sách tenlop, “số sinh viên của lớp” của tất cả các
lớp sắp xếp theo tên lớp:
SELECT [tenlop],count([masv]) As CountOfmasv
FROM [LOP] INNER JOIN [SINHVIEN] ON
[LOP].[malop]=[SINHVIEN].[malop]
GROUP BY [tenlop]
ORDER BY [tenlop]
Ví dụ: Câu lệnh lấy danh sách malop, tenlop, “số sinh viên của lớp” của
các lớp có sĩ số lớn hơn 19:
Trang 65
SELECT [malop],[tenlop],count([masv]) As
CountOfmasv
FROM [LOP] INNER JOIN [SINHVIEN] ON
[LOP].[malop]=[SINHVIEN].[malop]
GROUP BY [LOP].[malop],[tenlop]
HAVING (count([masv])>19)
4.3. Câu hỏi và bài tập
1) Tạo CSDL trên Server.
2) Viết các câu lệnh SQL phục vụ cho việc quản lý bảng LOP.
3) Viết các câu lệnh SQL phục vụ cho việc quản lý bảng SINHVIEN.
4) Viết các thủ tục lưu trữ phục vụ cho việc quản lý bảng LOP.
5) Viết các thủ tục lưu trữ phục vụ cho việc quản lý bảng SINHVIEN.
6) Viết các lệnh SQL nhằm:
- Kiểm tra sự tồn tại của một CSDL đã có trên MS SQL Server.
- Thêm Một CSDL mới.
- Thêm các bảng LOP, SINHVIEN và các quan hệ lên CSDL.
7) Hãy cho biết các lợi ích của thủ tục lưu trữ.
4.4. Bài mẫu
Thiết kế CSDL, nhập dữ liệu và viết khung nhìn, hàm chức năng theo yêu
cầu sau:
- Tạo CSDL có tên là QLSV với thiết kế như sau:
Trang 66
- Nhập dữ liệu:
- Tạo khung nhìn có tên là View_TKGT để thống kê số lượng sinh viên
của các lớp theo giới tính:
CREATE VIEW View_TKGT AS
SELECT malop, SUM(CASE gioitinh WHEN 1 THEN 1 ELSE 0 END) AS
„Nam‟, SUM(CASE gioitinh WHEN 0 THEN 1 ELSE 0 END) AS „Nữ‟
FROM SINHVIEN
GROUP BY malop
Go
- Tạo hàm người dùng có tên là Fun_LayTT để lấy thông tin của một sinh
viên phục vụ cho việc in giấy xác nhận phục vụ mục đích tạm hoãn nghĩa vụ
quân sự với tham số vào là mã sinh viên và với các tham số ra là họ tên, ngày
sinh, giới tính, lớp, khoa, năm học hiện tại, năm bắt đầu, năm kết thúc khóa học.
CREATE FUNCTION Fun_LayTT (@masv nvarchar(12))
RETURNS TABLE
AS
RETURN
Select hodem+' '+ten As hotensv,ngaysinh,case gioitinh when
1 then 'Nam' else N'Nữ' end As phai, LOP.malop, tenkhoa,namht,
khoa,khoa+sonam As namkt from LOP Inner Join SINHVIEN on
Lop.malop=SINHVIEN.malop Where masv=@masv
Go
Trang 67
Chương 5:
Truy cập cơ sở dữ liệu với ADO.NET
Thời lượng: 12 tiết
Mục tiêu:
- Hiểu vai trò, chức năng của các đối tượng hỗ trợ truy cập CSDL,
- Hiểu được cách truy cập dữ liệu với đối tượng Command,
- Hiểu được cách truy cập dữ liệu với mô hình CSDL ảo,
- Buộc được dữ liệu đơn giản, phức tạp,
- Viết được chương trình truy cập CSDL đơn giản.
5.1. Mô hình kết nối và truy cập dữ liệu với ADO.NET
5.1.1. Mô hình kết nối và truy cập dữ liệu tổng quát
Hình 5-1 mô tả đơn giản kiến trúc tổng quát của ADO.NET. Các đối
tượng trong kiến trúc này đều thuộc không gian tên System.Data. Sau đây là ý
nghĩa của các đối tượng:
Tên đối tượng Ý nghĩa
Connection để kết nối đến một CSDL
Transaction hỗ trợ giao tác trong truy cập dữ liệu
Command thực hiện các câu lệnh SQL
DeleteCommand thực hiện câu lệnh xóa
UpdateCommand thực hiện câu lệnh sửa
InsertCommand thực hiện câu lệnh chèn
SelectCommand thực hiện câu lệnh lấy dữ liệu
DataReader đọc dữ liệu từng dòng một
DataAdapter hỗ trợ DataSet đồng bộ dữ liệu với
CSDL qua các câu lệnh SQL
DataSet CSDL ảo trên ứng dụng
DataTable bảng trong DataSet
Trang 68
Hình 5-1 Mô hình truy cập dữ liệu tổng quát trong ADO.NET
5.1.2. Connection
Để kết nối đến một CSDL ta sử dụng đối tượng Connection. Đối với mỗi
loại CSDL, .NET thiết kế một lớp Connection cụ thể. Chẳng hạn, với CSDL MS
SQL Server thì có SqlConnection thuộc không gian tên System.Data.SqlClient,
với CSDL MS Access thì có OleDbConnection thuộc không gian tên
System.Data.OleDb, Như Connection, các lớp Command, Transaction,
DataReader, DataAdapter cũng được thiết kế tương tự cho các loại CSDL. Sau
đây là một số thuộc tính, phương thức của lớp Connecttion.
Tên Ý nghĩa
ConnectionString tên chuỗi kết nối. Một chuỗi kết nối có các thông tin: tên
HQT CSDL, tên máy chủ, tên CSDL, tên đăng nhập, mật
Database
Connection Transaction
C
o
m
m
a
n
d
DeleteCommand
UpdateCommand
InsertCommand
SelectCommand
DataReader
DataAdapter
Command
DataSet
DataTable
Tabl
e
A
p
p
li
ca
ti
o
n
Trang 69
khẩu, Có một số điều khiển dữ liệu giúp ta có được
ConnectionString một cách chính xác.
State trạng thái của kết nối
Close() đóng kết nối
Open() mở kết nối
5.1.3. Kết nối đến cơ sở dữ liệu
Việc kết nối đến CSDL dựa trên mô hình Client - Server. CSDL được trên
Server và chương trình ứng dụng được đặt ở máy người dùng (Client). Quy trình
để một Client kết nối đến Server được thực hiện theo các bước sau:
- Client gửi chuỗi kết nối chứa các thông tin về Client và CSDL muốn kết
nối đến Server.
- Server kiểm tra thông tin:
+ Nếu hợp lệ thì cho phép Client quyền truy cập CSDL tương ứng.
Việc truy cập cũng được thực hiện bằng các câu lệnh SQL.
+ Nếu không hợp lệ thì không cấp quyền truy cập.
Để truy cập đến một CSDL ta thực hiện theo các bước:
Bước 1: tạo đối tượng Connection
- Xác định chuỗi kết nối đến CSDL cần truy cập. Giả sử biến được đặt tên
là ChuoiKetNoi.
ChuoiKetNoi = @"Data Source=XP-VANTOAN\SQLEXPRESS;Initial
Catalog=QLSV;Integrated Security=True";
- Tạo đối tượng Connection. Giả sử biến được đặt tên là KN. Như vậy, ta
có thể tạo đối tượng Connection như sau.
SqlConnection KN = new SqlConnection(ChuoiKetNoi);
Bước 2: truy cập dữ liệu
Để truy cập dữ liệu với CSDL MS SQL Server ta thực hiện theo trình tự:
- Mở kết nối:
KN.Open();
- Thực hiện các câu lệnh SQL.
- Đóng kết nối:
KN.Close();
Trang 70
Để kiểm tra kết nối có thành công hay không, ta có thể xây dựng phương
thức KiemTraKN như sau:
Public static bool KiemTraKN()
{
try
{
KN.Open();
KN.Close();
return true;
}
catch
{
return false;
}
}
Phương thức KiemTraKN() sẽ trả về true khi kết nối thành công, ngược
lại thì kết nối không thành công.
Người ta thường xây dựng thuộc tính Connection để lấy đối tượng
Connection cụ thể làm nhiệm vụ kết nối. Trong các thao tác cập nhật dữ liệu, đối
tượng làm nhiệm vụ kết nối được sử dụng thường xuyên nên thuộc tính này là
rất hữu ích.
5.1.4. Transaction
Là lớp hỗ trợ quản lý theo giao tác trong việc cập nhật dữ liệu. Nếu không
sử dụng giao tác, một thao tác cập nhật (thêm, xóa, sửa) sẽ làm thay đổi dữ liệu
thật sự. Còn khi sử dụng giao tác, ta có thể sử dụng một số thao tác cập nhật dữ
liệu thì dữ liệu cũng thay đổi nhưng chưa có hiệu lực thực sự cho đến chấp nhận
hoặc hủy bỏ giao tác. Nếu chập nhận giao tác thì các thao tác cập nhật dữ liệu
trong giao tác đó sẽ có hiệu lực, còn nếu hủy bỏ giao tác thì các thao tác cập
nhật dữ liệu trong giao tác đó không có hiệu lực.
Việc sử dụng giao tác trong việc cập nhật dữ liệu là cần thiết trong các
trường hợp liên quan đến những dữ liệu quan trọng.
Trình tự thực hiện cập nhật dữ liệu theo giao tác trải qua các bước:
Bước 1: bắt đầu một giao tác
- Sử dụng đối tượng Connection hiện tại:
Trang 71
Connection.Open();
SqlTransaction gt = Connection.BeginTransaction();
Bước 2: thực hiện cập nhật dữ liệu
Thực hiện các thao tác cập nhật dữ liệu
Bước 3: chấp nhận hoặc hủy bỏ giao tác
- Nếu chấp nhận giao tác, ta thực hiện:
gt.Commit();
Connection.Close();
- Nếu hủy bỏ giao tác, ta thực hiện:
gt.Rollback();
Connection.Close();
5.2. Mô hình truy cập dữ liệu với Command
Đối với mô hình này, việc cập nhật dữ liệu được thực hiện thông qua đối
tượng Command, việc đọc dữ liệu thông qua đối tượng DataReader kết hợp với
đối tượng Command.
5.2.1. Command
Là lớp hỗ trợ việc gửi các câu lệnh SQL đến HQT CSDL có CSDL cần
truy cập và hỗ trợ việc đọc dữ liệu gửi về từ HQT CSDL. Một số thuộc tính và
phương thức của lớp Command:
Tên Ý nghĩa
CommandType kiểu Command, là một trong ba giá trị: Text (mặc định),
StoredProcedure, TableDirect.
CommandText tương ứng với CommandType là một trong ba kiểu: câu
lệnh SQL, tên thủ tục lưu trữ, tên bảng.
Connection đối tượng kết nối.
ExecuteNonQuery() thực thi truy vấn cập nhật (Insert, Delete, Update) và trả
về số lượng dòng dữ liệu bị ảnh hưởng bởi truy vấn.
Giả sử: biến cmd có CommandText là “Delete SINHVIEN
Where masv = A123”;
Khi đó:
int soluong = cmd.ExecuteNonQuery();
Trang 72
ExecuteReader() thực thi một truy vấn và trả về đối tượng DataReader để
truy cập kết quả truy vấn.
Giả sử: biến cmd có CommandText là “Select * From
SINHVIEN”;
Khi đó:
SqlDataReader rd = cmd.ExecuteReader();
ExecuteScalar() thực thi một truy vấn và trả về giá trị ở cột đầu tiên của
dòng đầu tên trong bảng kết quả truy vấn.
Giả sử: biến cmd có CommandText là “Select Count(*)
From SINHVIEN”;
Khi đó:
int soluongsv = (int)cmd.ExecuteScalar();
5.2.2. DataReader
Là lớp hỗ trợ việc đọc từng dòng dữ liệu từ bảng dữ liệu trả về của
phương thức ExecuteReader() của một đối tượng Command. Cách đọc dữ liệu
của DataReader cũng tương tự như cách đọc của StreamReader.
Sau đây là một số thuộc tính, phương thức thường dùng của DataReader:
Tên Ý nghĩa
FieldCount số cột của bản ghi
HasRows còn 1 hoặc nhiều dòng dữ liệu chưa đọc tới
IsClosed không còn trong trạng thái đọc
Close() kết thúc việc đọc
NextResult() còn 1 hoặc nhiều dòng dữ liệu chưa đọc tới
Read() đọc một dòng dữ liệu.
Sau đây là đoạn mã lệnh sử dụng DataReader đọc dữ liệu và đưa dữ liệu
vào một ListBox:
cmd.CommandText="Select * From SINHVIEN";
SqlDataReader rd = cmd.ExecuteReader();
ListBox ds = new ListBox();
Trang 73
while (rd.Read())
{
string st = rd[1].ToString();
ds.Items.Add(st);
}
rd.Close();
Hình 5-2 mô tả mô hình truy cập dữ liệu với Command.
Hình 5-2 Mô hình truy cập dữ liệu với Command
Trong mô hình này, mỗi lần có một thao tác truy cập CSDL, ta mở kết nối
với CSDL để thực hiện các thao tác. Thực hiện xong, ta đóng kết nối.
5.3. Mô hình truy cập dữ liệu nâng cao với cơ sở dữ liệu ảo
5.3.1. DataSet
Là lớp đóng vai trò như là một CSDL ảo. Cơ sở dữ