DATA PROVIDER
© 2017 ngocminhtran.com
• Là tập các lớp (classes) dùng để quản lí và xử
lí kết nối đến một nguồn dữ liệu (data source)
như SQL Server.
• Hiện tại .NET Framework cung cấp 3 data
provider, Sql Server cho MS SQL Server,
ODBC và OLE DB cho Access, MySQL,
Oracle.
• Các Data Provider thuộc các namespace sau
(muốn dùng data provider nào phải khai báo
namespace tương ứng):
• Mỗi data provider sẽ thừa kế các lớp và giao
diện thực thi tương ứng:
Lớp Connection
• Thừa kế từ lớp
System.Data.Common.DbConnection
• Mỗi data provider sẽ có một lớp connection
tương ứng:
• Lớp DbConnection có giao diện IDbConnection
chứa các phương thức (methods) và thuộc tính
(properties) sau:
• Tạo một đối tượng Connection:
Private m_cn As New SqlConnection()
• Tạo chuỗi kết nối (thuộc tính ConnectionString)
cho đối tượng Connection:
m_cn.ConnectionString = "Data
Source=.SQLEXPRESS; Initial catalog=demodb;
integrated security=True;"
demodb là database cần kết nối; Integrated Security =
true nếu kết nối tới localhost, ngược lại = false.
• Sau khi thiết lập chuỗi kết nối, mở kết nối bằng
phương thức Open():
m_cn.Open()
• Đóng kết nối bằng phương thức Close():
m_cn.Close()
Lớp command
• Mỗi data provider sẽ có lớp command dùng để
thực thi các lệnh SQL hay các thủ tục lưu trú đến
database.
• Thừa kế từ lớp
System.Data.Common.DbCommand
• Mỗi data provider có các lớp command khác
nhau:
Các thuộc tính của giao diện IDbCommand:
Các phương thức của IDbCommand:
Tạo đối tượng Command:
Private command As New SqlCommand()
Gán chuỗi lệnh SQL cho đối tượng Command:
command.CommandText = "Select * From sinhvien"
Thực thi lệnh SQL:
command.Connection = m_cn
Cách viết khác cho Command:
Private command As SqlCommand
command = New SqlCommand("Select * From sinhvien",
m_cn)
Lớp DataReader
Thừa kế từ System.Data.Common.DbDataReader
Mỗi data provider có các lớp DataReader khác
nhau:
Các thuộc tính:
Các phương thức:
Tạo biến kiểu sqlDataReader:
Private m_dr As SqlDataReader
Đọc dữ liệu từ database (chú ý thứ tự các lệnh):
m_cn.ConnectionString = "Data Source = .TRANNGOCMINH;
Initial catalog =demodb; Integrated Security = true"
command = New SqlCommand("SELECT * FROM sinhvien", m_cn)
m_cn.Open()
m_dr = command.ExecuteReader()
Hiển thị dữ liệu từ DataReader:
While m_dr.Read
MessageBox.Show(m_dr("Ten").ToString())
End While
Đoạn mã trên hiển thị cột Ten của bảng sinhvien cho
tất cả các hàng. Chúng ta có thể hiển thị chỉ một hàng
bằng cách truyền tham số cho phương thức
ExecuteReader như sau:
m_dr = command.ExecuteReader(CommandBehavior.SingleRow)
Đóng DataReader:
m_dr.Close()
Cách tiếp cận sử dụng DataReader để đọc dữ
liệu từ database theo các bước như trên gọi là
cách tiếp cận kết nối (connected approach)
• Chúng ta sẽ đến với cách tiếp cận khác gọi là phi
kết nối (disconnected approach) tức là ứng dụng
đọc dữ liệu từ database mà không cần duy trì trạng
thái kết nối đến database. Với cách tiếp cân này,
thay vì dùng DataReader, chúng ta sẽ dùng lớp
DataAdapter và DataSet.
Lớp DataAdapter
• Thừa kế từ lớp
System.Data.Common.DbDataAdapter
• Mỗi data provider có các lớp DataAdapter khác
nhau:
• Các thuộc tính:
• Các phương thức:
• Khai báo đối tượng DataAdapter:
Private m_da As New SqlDataAdapter()
• Nhận lệnh SQL từ đối tượng Command để thực
thi thông qua thuộc tính SelectCommand:
command = New SqlCommand("SELECT * FROM sinhvien", m_cn)
m_da.SelectCommand = command
• Thực thi lệnh SQL từ đối tượng Command thông
qua thuộc tính SelectCommand bằng phương thức
Fill(). Đối số của phương thức này là một object
của lớp DataSet hay DataTable.
• Chúng ta sẽ hiểu rõ hơn về DataAdapter qua các
bài tập phần sau.
Lớp DataSet
• Dùng trong cách tiếp cận phi kết nối, nghĩa là ta có
thể làm việc với nội dung của database mà không
cần kết nối với database vì toàn bộ database đã
được sao chép sang DataSet.
• Database gồm nhiều tables, mỗi table gồm nhiều
columns và rows. Tương tự, DataSet cũng có nhiều
DataTables, mỗi DataTable có nhiều DataRows và
DataColumns. Tương tác với các đối tượng này
chúng ta sẽ hiểu rõ hơn qua các ví dụ sau.
Thực hành
Tạo ứng dụng sau:
Listbox:lst
• Tạo một cơ sở dữ liệu tên demodb với bảng
sinhvien như sau:
• Sử dụng cách tiếp cận kết nối.
• Sử dụng cách tiếp cận phi kết nối.
Kết nối
• Khởi tạo các biến ( hay đối tượng) cấp module
kiểu Connection, Command, DataReader:
• Khởi tạo chuỗi kết nối cho đối tượng connection
m_cn, khởi tạo đối tượng command, khai báo một
số biến phụ và khởi tạo listbox:
• Mở kết nối, thực thi đối tượng DataReader và hiển
thị dữ liệu ra ListBox. Đóng DataReader và
Connection khi hoàn thành:
Phi kết nối
• Khởi tạo các biến ( hay đối tượng) kiểu
Connection, Command, DataAdapter và DataSet:
• Khởi tạo chuỗi kết nối cho đối tượng connection
m_cn, khởi tạo đối tượng command và gán nó cho
thuộc tính SelectCommand của đối tượng
DataAdapter:
• Thực thi truy vấn bằng phương thức Fill() của đối
tượng DataAdapter, dữ liệu nhận được gán vào đối
tượng dataset và hiển thị nó ra listbox:
Các chức năng thêm, xóa, sửa
Cách tiếp cận kết nối
Chức năng thêm dữ liệu
• Sử dụng thuộc tính Parameters của đối
tượng Command
• Code đầy đủ:
Chức năng xóa dữ liệu
• Sử dụng thuộc tính Parameters của đối
tượng Command
• Code đầy đủ:
Chức năng chỉnh sửa
• Sử dụng thuộc tính Parameters của đối
tượng Command
• Code đầy đủ:
Cách tiếp cận phi kết nối
Thêm dữ liệu
Xoá dữ liệu
Cập nhật dữ liệu
Data provider

Data provider

  • 1.
    DATA PROVIDER © 2017ngocminhtran.com
  • 3.
    • Là tậpcác lớp (classes) dùng để quản lí và xử lí kết nối đến một nguồn dữ liệu (data source) như SQL Server. • Hiện tại .NET Framework cung cấp 3 data provider, Sql Server cho MS SQL Server, ODBC và OLE DB cho Access, MySQL, Oracle. • Các Data Provider thuộc các namespace sau (muốn dùng data provider nào phải khai báo namespace tương ứng):
  • 4.
    • Mỗi dataprovider sẽ thừa kế các lớp và giao diện thực thi tương ứng:
  • 5.
  • 6.
    • Thừa kếtừ lớp System.Data.Common.DbConnection • Mỗi data provider sẽ có một lớp connection tương ứng: • Lớp DbConnection có giao diện IDbConnection chứa các phương thức (methods) và thuộc tính (properties) sau:
  • 8.
    • Tạo mộtđối tượng Connection: Private m_cn As New SqlConnection() • Tạo chuỗi kết nối (thuộc tính ConnectionString) cho đối tượng Connection: m_cn.ConnectionString = "Data Source=.SQLEXPRESS; Initial catalog=demodb; integrated security=True;" demodb là database cần kết nối; Integrated Security = true nếu kết nối tới localhost, ngược lại = false.
  • 9.
    • Sau khithiết lập chuỗi kết nối, mở kết nối bằng phương thức Open(): m_cn.Open() • Đóng kết nối bằng phương thức Close(): m_cn.Close()
  • 10.
  • 11.
    • Mỗi dataprovider sẽ có lớp command dùng để thực thi các lệnh SQL hay các thủ tục lưu trú đến database. • Thừa kế từ lớp System.Data.Common.DbCommand • Mỗi data provider có các lớp command khác nhau:
  • 12.
    Các thuộc tínhcủa giao diện IDbCommand:
  • 13.
    Các phương thứccủa IDbCommand:
  • 14.
    Tạo đối tượngCommand: Private command As New SqlCommand() Gán chuỗi lệnh SQL cho đối tượng Command: command.CommandText = "Select * From sinhvien" Thực thi lệnh SQL: command.Connection = m_cn
  • 15.
    Cách viết kháccho Command: Private command As SqlCommand command = New SqlCommand("Select * From sinhvien", m_cn)
  • 16.
  • 17.
    Thừa kế từSystem.Data.Common.DbDataReader Mỗi data provider có các lớp DataReader khác nhau: Các thuộc tính:
  • 18.
  • 20.
    Tạo biến kiểusqlDataReader: Private m_dr As SqlDataReader Đọc dữ liệu từ database (chú ý thứ tự các lệnh): m_cn.ConnectionString = "Data Source = .TRANNGOCMINH; Initial catalog =demodb; Integrated Security = true" command = New SqlCommand("SELECT * FROM sinhvien", m_cn) m_cn.Open() m_dr = command.ExecuteReader() Hiển thị dữ liệu từ DataReader: While m_dr.Read MessageBox.Show(m_dr("Ten").ToString()) End While
  • 21.
    Đoạn mã trênhiển thị cột Ten của bảng sinhvien cho tất cả các hàng. Chúng ta có thể hiển thị chỉ một hàng bằng cách truyền tham số cho phương thức ExecuteReader như sau: m_dr = command.ExecuteReader(CommandBehavior.SingleRow) Đóng DataReader: m_dr.Close()
  • 22.
    Cách tiếp cậnsử dụng DataReader để đọc dữ liệu từ database theo các bước như trên gọi là cách tiếp cận kết nối (connected approach) • Chúng ta sẽ đến với cách tiếp cận khác gọi là phi kết nối (disconnected approach) tức là ứng dụng đọc dữ liệu từ database mà không cần duy trì trạng thái kết nối đến database. Với cách tiếp cân này, thay vì dùng DataReader, chúng ta sẽ dùng lớp DataAdapter và DataSet.
  • 23.
  • 24.
    • Thừa kếtừ lớp System.Data.Common.DbDataAdapter • Mỗi data provider có các lớp DataAdapter khác nhau: • Các thuộc tính:
  • 26.
  • 28.
    • Khai báođối tượng DataAdapter: Private m_da As New SqlDataAdapter() • Nhận lệnh SQL từ đối tượng Command để thực thi thông qua thuộc tính SelectCommand: command = New SqlCommand("SELECT * FROM sinhvien", m_cn) m_da.SelectCommand = command • Thực thi lệnh SQL từ đối tượng Command thông qua thuộc tính SelectCommand bằng phương thức Fill(). Đối số của phương thức này là một object của lớp DataSet hay DataTable.
  • 29.
    • Chúng tasẽ hiểu rõ hơn về DataAdapter qua các bài tập phần sau.
  • 30.
  • 31.
    • Dùng trongcách tiếp cận phi kết nối, nghĩa là ta có thể làm việc với nội dung của database mà không cần kết nối với database vì toàn bộ database đã được sao chép sang DataSet. • Database gồm nhiều tables, mỗi table gồm nhiều columns và rows. Tương tự, DataSet cũng có nhiều DataTables, mỗi DataTable có nhiều DataRows và DataColumns. Tương tác với các đối tượng này chúng ta sẽ hiểu rõ hơn qua các ví dụ sau.
  • 32.
  • 33.
    Tạo ứng dụngsau: Listbox:lst
  • 35.
    • Tạo mộtcơ sở dữ liệu tên demodb với bảng sinhvien như sau:
  • 36.
    • Sử dụngcách tiếp cận kết nối. • Sử dụng cách tiếp cận phi kết nối.
  • 37.
  • 38.
    • Khởi tạocác biến ( hay đối tượng) cấp module kiểu Connection, Command, DataReader: • Khởi tạo chuỗi kết nối cho đối tượng connection m_cn, khởi tạo đối tượng command, khai báo một số biến phụ và khởi tạo listbox:
  • 39.
    • Mở kếtnối, thực thi đối tượng DataReader và hiển thị dữ liệu ra ListBox. Đóng DataReader và Connection khi hoàn thành:
  • 40.
  • 41.
    • Khởi tạocác biến ( hay đối tượng) kiểu Connection, Command, DataAdapter và DataSet: • Khởi tạo chuỗi kết nối cho đối tượng connection m_cn, khởi tạo đối tượng command và gán nó cho thuộc tính SelectCommand của đối tượng DataAdapter:
  • 42.
    • Thực thitruy vấn bằng phương thức Fill() của đối tượng DataAdapter, dữ liệu nhận được gán vào đối tượng dataset và hiển thị nó ra listbox:
  • 43.
    Các chức năngthêm, xóa, sửa
  • 44.
    Cách tiếp cậnkết nối
  • 45.
    Chức năng thêmdữ liệu
  • 46.
    • Sử dụngthuộc tính Parameters của đối tượng Command • Code đầy đủ:
  • 48.
    Chức năng xóadữ liệu
  • 49.
    • Sử dụngthuộc tính Parameters của đối tượng Command • Code đầy đủ:
  • 51.
  • 52.
    • Sử dụngthuộc tính Parameters của đối tượng Command • Code đầy đủ:
  • 54.
    Cách tiếp cậnphi kết nối
  • 55.
  • 57.
  • 59.