Điều này có nghĩa là bạn có thể sử dụng đối tượng này để nắm giữ dữ liệu của cơ sỡ dữ liệu bất kỳ tùy thuộc vào trình điều khiển cơ sở dữ liệu .NET Data Provider, ở đây chúng ta đề cập đ
Trang 1Trường ĐH Công Nghệ Thông Tin
Khoa Hệ Thống Thông Tin
DATASET & DATAREADER
Môn: Lập Trình CSDL
Nhóm: Trương Thanh Danh
Nguyễn Hoàng Dũng
Nguyễn Tấn Huy
Trang 2DataSet
Trang 3DataSet là thành phần chính của khiến trúc không kết nối cơ sở dữ liệu Bản thân nó được xem như là một Container dùng để chứa các đối tượng
DataTable, DataView và DataRelation
Đối tượng DataSet được sử dụng cho mọi cơ sở
dữ liệu Điều này có nghĩa là bạn có thể sử dụng đối tượng này để nắm giữ dữ liệu của cơ sỡ dữ liệu bất
kỳ tùy thuộc vào trình điều khiển cơ sở dữ liệu
(.NET Data Provider), ở đây chúng ta đề cập đến
SQL Server Chúng ta có thể thay đổi dữ liệu bên
trong đối tượng này để sau đó cập nhật trở lại cơ sở
dữ liệu nguồn bằng phương thức Update của đối
tượng SqlDataAdapter
Trang 41/ Khai báo và khởi tạo:
Đối tượng DataSet thuộc không gian tên
System.Data, chính vì vậy khi làm việc với đối tượng này, bạn cần khai báo sử dụng không gian tên
System.Data.
Chúng ta có thể khai báo như sau:
DataSet ds;
Sau khi khai báo đối tượng, để sử dụng được
chúng chúng, ta có thể khởi tạo theo các cách sau:
ds = new DataSet();
hoặc
ds = new DataSet(“Name”);
Trang 5Lưu ý Khi khởi tạo đối tượng DataSet, nếu không cung cấp tên thì nó sẽ mang tên là NewDataSet.
Bạn cũng có thể vừa khai báo vừa khởi tạo DataSet như sau:
DataSet ds = new DataSet(“Name”);
DataSet ds = new DataSet();
Hoặc có thể dùng một phương thức có kiểu trả về
là một đối tượng DataSet để gán giá trị cho một đối
tượng DataSet mà không cần phải khởi tạo
DataSet ds = getDataSet (“Select * from tblStudent”);
Trang 6Khai báo đoạn chương trình
private void btnShowDataSetName_click (object sender, EventArgs e)`
{
DataSet ds = new DataSet("Day la ten DataSet");
MessageBox.Show("Tên DataSet này là: " + ds.DataSetName);
}
Trang 7Khi thực thi chương trình khi click vào nút ShowDataSetName ta sẽ có kết quả như sau:
Trang 82.2 Thuộc tính Tables
DataSet được mệnh danh là Container chứa danh sách các đối tượng DataTable Để truy cập các đối tượng DataTable trong đối tượng DataSet, ta có thể
sử dụng thuộc tính Tables
Thuộc tính Tables trả về tập bao gồm các danh sách các đối tượng DataTable trong đối tượng DataSet
Trang 9Ví dụ:
Ta sử dụng thuộc tính Tables để đưa dữ liệu của Table
Student thuộc đối tượng ds vào DataGridView
private void btnConnect_Click(object sender, EventArgs e)
Trang 10• Kết quả:
•
Trang 11Lưu ý:
Thuộc tính Tables trả về DataTale Collection, ta có
thể sử dụng một số phương thức để thêm, xóa đối
tượng DataTable Vào đối tượng DataSet và một số thuộc tính khác như sau:
Phương thức Add:
Cho phép chúng ta thêm một đối tượng DataTable vào đối tượng DataSet Chẳng hạn, ta khai báo và khởi tạo đối tượng DataTable, sau đó thêm vào đối tượng
DataSet đang có
DataSet ds = new DataSet();
DataTable dataTable = new DataTable();
dataSet.Tables.Add(dataTable);
Trang 12Phương thức Remove và RemoveAt:
Cho phép ta xóa một đối tượng DataTable ra khỏi đối tượng DataSet hay tên đối tượng DataTable chỉ
định:
Ví dụ, ta khái báo và khởi tạo đối tượng DataTable rồi thêm vào đối tượng DataSet đang có, sau đó khai báo xóa đối tượng DataTable
DataSet ds = new DataSet():
DataTable dataTable = new DataTable();
ds.Tables.Add(dataTable);
ds.Tables.Remove(dataTable);
Trang 13DataSet ds = new DataSet():
DataTable dataTable = new
phương thức RemoveAt như sau:
DataSet ds = new DataSet():
DataTable dataTable = new
DataTable(“Student”);
ds.Tables.Add(dataTable);
ds.Tables.RemoveAt(0);
Trang 14Phương thức Clear:
Cho phép bạn loại bỏ tất cả các đói tượng
DataTable tồn tại trong đốitượng DataSet với cú pháp như sau:
DataSet ds = new DataSet():
DataTable dataTable = new DataTable(“Student”); ds.Tables.Add(dataTable);
ds.Tables.Clear();
Trang 15Phương thức CanRemove
Trả về true nếu tham số ứng với đối tượng
DataTable đang tồn tại và có thể cho phép loại bỏ chúng trong đối tượng DataSet, cú pháp:
DataSet ds = new DataSet():
DataTable dataTable = new DataTable(“Student”); ds.Tables.Add(dataTable);
if (ds.Tables.CanRemove(dataTable))
ds.Table.Remove(“Student”);
Trang 16Phương thức Contains:
Cho phép bạn kiểm tra đối tượng DataTable có tồn tại trong đối tượng DataSet hay không bằng cú pháp như sau:
DataSet ds = new DataSet();
Trang 183/ Phương thức
Ngoài các thuộc tính vừa trình bày ở trên, đối
tượng DataSet cung cấp một số phương thức như : GetChanges, AcceptChanges, RejectChange, Clear, WriteXml, ReadXml và CreateDataReader
3.1/ Phương thức GetChanges
Phương thức này trả về đối tượng DataSet gồm danh sách các đối tượng DataTable chứa dựng những mẫu tin có thay đổi hoặc thêm mới
Khi có nhu cầu về thêm mới, xóa, thay đổi dữ liệu trên đối tượng DataSet và cần cập nhật lại cơ sở dữ liệu nguồn, bạn có thể sử dụng phương thức này để trích lọc ra danh sách những đối tượng chứa những mẫu tin đã thay đổi
Trang 19Ví dụ:
Sau khi trình bày bảng “Student” trên
dataGridView1 ta thêm mới một mẫu tin như sau:
Trang 20• Và sửa lại mẫu tin có ID là “1”
Trang 21• Sau khi nhấn nút “GetChanges” ta sẽ được kết quả như sau:
Trang 22Để làm được điều này ta khai báo biến cố click
button GetChanges như sau :
private void btnGetChanges_Click(object sender, EventArgs e)
Trang 23Chúng ta có thể sử dụng phương thức GetChanges để tạo ra một đối tương DataSet mới chứa các mẩu tin bị thay đổi, sau đó chúng
ta dùng đối tượng DataSet này để cập nhật lại CSDL:
private void btnAcceptChanges_Click(object sender, EventArgs e)
{
// Sử dụng phương thức GetChanges để lấy dữ liệu cần update
DataSet dsChange = new DataSet();
Trang 243.2/ Phương thức AcceptChanges và RejectChanges
Để chấp nhận sự hay từ chối sự thay đổi dữ liệu do người dùng thực hiện bạn có thể gọi phương thức AcceptChanges hay RejectChanges Gọi phương thức AcceptChanges:
private void btnAcceptChanges_Click(object sender, EventArgs e)
{
ds.AcceptChanges();
}
Gọi phương thức RejectChanges :
private void btnRejectChanges_Click(object sender, EventArgs e)
Trang 253.3/ Phương thức Clear:
Xóa tất cả các đối tượng DataTable, DataRelation trong đối tượng DataSet
Gọi phương thức Clear:
private void btnClear_Click(object sender, EventArgs e) {
ds.Clear();
}
Trang 283.6/ Phương thức CreateDataReader
Phương thức này cho phép ta chuyển dữ liệu trong các đối tượng DataTable chứa trong một đối tượng DataSet thành đối tượng DataTableReader với định dạng chỉ đọc một chiều
Cú pháp
DataTableReader dataTableReader;
dataTableReader = ds.CreateDataReader();
Trang 29DataReader
Trang 301.IDataReader là gì ?
IDataReader là một giao diện mô tả một Data-Reader Công việc mà giao diện IDataReader là thực hiện các truy xuất dữ liệu từ một nguồn dữ liệu có sẵn (Sql server , oracle ,Access
….)
cơ chế hoạt động của IDataReader là chỉ tiến – chỉ đọc
(forward only-read only) Điều này có nghĩa khi truy xuất
dữ liệu thì IDataReader chỉ truy xuất theo một hướng duy
nhất là hướng đến dữ liệu tiếp theo và đọc dữ liệu hiện đang truy xuất
Chúng ta cùng nhau tìm hiểu một số Data-Provider chuẩn
Trang 312 Một số thuộc tính và phương thước của IDataReader
Một số thuộc tính thông dụng của IDataReader
Tên thuộc
tính Mô tả
FieldCount Lấy số cột trong hàng hiện tại
IsClosed Kiểm tra xem IDataReader hiện tại đóng hay mở Ứng
với các giá trị True (đóng ) và False (mở ).
Item Đối tượng trả về là giá trị của cột trong hàng hiện tại Cột
có thể được chỉ định là số nguyên (số thứ tự của cột trong bảng với cột đầu tiên có giá trị là 0) hay một chuỗi (Tên của cột hiện tại)
Trang 32Một số phương thức thông dụng của IDataReader
Thuộc tính Mô tả
GetDataTypeName Lấy tên của kiểu dữ liệu của một cụ thể
GetFieldType Mô tả kiểu dữ liệu trong cột cụ thể (cột được chỉ định
bằng kiểu số nguyên , mặc định cột đầu tiên là 0).
GetName Lấy tên của cột cụ thể (cột được chỉ định bằng kiểu số
nguyên , mặc định cột đầu tiên là 0).
GetOrdinal Lấy số thứ tự của cột (với cột đầu tiên là 0) và được chỉ
định bằng tên của cột GetSchemaTable Trả về đối tượng System.Data.DataTable chứa siêu dữ
liệu mô tả các cột có trong IDataReader IsDBnull Có 2 thể hiện : True nếu giá trị cụ thể trong cột là null và
False nếu giá trị cụ thể trong cột khác null NextResult Để di chuyển qua các giá trị của các cột với điều kiện
IDataReader có nhiều giá trị Mặc định giá trị ban đầu là cột đầu tiên
Read Đọc tới giá trị kế tiếp trong IDataReader Tất nhiên giá
trị đầu tiên luôn nằm ở bản ghi đầu tiên
Trang 33Ngoài ra chúng ta nên sử dụng phương thức closed
và dispose để đóng kết nối cơ sở dữ liệu hiện tại để có thể mở lại sử dụng khi cần thiết
Cách sử dụng IDataReader để truy xuất dữ liệu
Trong giới hạn, chúng tôi chỉ thực hiện cách sử
dụng SqlDataReader để truy xuất dữ liệu trong
SqlServer Nhưng sử dụng IDataReader trong các cơ
sở dữ liệu khác cũng mang hình thức tương tự
Trang 34Các khai báo cần thiết
Hai câu lệnh cần thiết để có thể sử dụng :
using System;
using System.Data.SqlClient ;
Chúng tôi sẽ không nói về hai câu lệnh này vìđơn giản để có thể kết nối cũng như làm việc vớiSqlServer thì bạn cần có thêm câu lệnh trên
IDataReader sử dụng trong SqlServer là
SqlDataReader
Khai báo SqlDataReader như sau :
SqlDataReader reader ;
Trang 35Để có thể truy xuất dữ liệu, trước tiên bạn cần tạo
một kết nối tới dữ liệu :
Trang 36Một đối tượng quan trọng để có thể sử dụng
SqlDataReader là SqlCommand (Sql command là một đối tượng lưu trữ một truy vấn trong SqlServer Các bạn tìm hiều SqlCommand để biết thêm những tính năng của nó Một phương thức quan trọng của Sql Command là executeReader() Phương thức này được gọi nó sẽ thực hiện một thực thể SqlCommand
đã được khai báo và trả về một kết quả là một kiểu IDataReader
Trang 37Khai báo một SqlCommand
SqlCommand command= new
Trang 38Nếu bạn muốn hiện thị dữ liệu của bạn Bạn sẽ cần đến phương thức Read() để đọc lần lượt từng dữ liệu trong
từng bản ghi của bạn chúng ta sẽ cần 1 vòng lặp để kiểm soát việc này
Và cuối cùng để lấy kết quả mà bạn muốn truy xuất bạn dùng thực thể reader ban đầu
Có 2 cách mà bạn có thể sử dụng để lấy được dữ liệu
mà bạn truy xuất tới
Trang 39Và cuối cùng chúng ta không nên quên việc đóng kết nối khi thực hiện xong các thao tác dữ liệu của mình bằng phương thức closed().
reader.closed();
Bây giờ mình sẽ Demo một chương trình đơn giản để truy xuất dữ liệu Chương trình này mô phỏng việc truy xuất dữ liệu bằng lệnh select và sử dụng một số phương thức của đối tượng SqlDataReader với cơ sở
dữ liệu là
Một bảng gồm thông tin nhóm của mình bao gồm số thứ tự, họ và tên , địa chỉ , số điện thoại , và email
Trang 40Đây là bảng dữ liệu của mình
Trang 41So sánh giữa DataSet và DataReader
DataReader
Ưu điểm: Thực thi nhanh, ít tốn tài nguyên hơn
so với DataSet rất nhiều
Khuyết điểm: Tùy biến không cao, thường dùng
để lấy dữ liệu và trình bày, hạn chế chỉnh sữa CSDL