Trương Phước HảiKết nối CSDL bằng Wizard 22 Lập trình quản lý nâng cao Chọn loại DataGrid cho ứng dụng WindowsForm... Trương Phước HảiChọn thuộc tính của bảng cần hiển thịtrong DataGri
Trang 1Tổng quan mô hình truy xuất CSDL
ADO.NET
ThS Trương Phước Hải
Trang 2Trương Phước Hải
Nội dung
2
1 Các mô hình truy xuất CSDL
2 Giới thiệu ADO.Net
3 Tổng quan kiến trúc ADO.Net
4 Kết nối CSDL bằng ADO.Net
Trang 3Nơi nào có lưu trữ thông tin, nơi đó cầnquản lý thông tin.
Quản lý giáo dục, quản lý bệnh viện, quản
lý bán hàng, quản lý nhân sự, tiền lương…
Ứng dụng quản lý thông tin
Trang 4Trương Phước Hải
Truy xuất thông tin từ CSDL:
Trang 6Trương Phước Hải
Trang 7ODBC (Open Database Connectivity)
OLE DB (Obj Linking & Embedding DB)
DAO (Data Access Object)
RDO (Remote Data Object)
ADO (ActiveX Data Objects)
Các mô hình truy xuất CSDL
Trang 8Trương Phước Hải
Nội dung
8
1 Các mô hình truy xuất CSDL
2 Giới thiệu ADO.Net
3 Tổng quan kiến trúc ADO.Net
4 Kết nối CSDL bằng ADO.Net
Trang 9Mô hình truy xuất CSDL trên nền NET.
Tăng tốc truy xuất dữ liệu theo mô hình
đa lớp (n-tier): tách biệt truy cập dữ liệuvới thao tác dữ liệu
Cho phép truy xuất dữ liệu ở chế độ
connected và disconnected
Hỗ trợ thao tác với XML
Gồm 2 thành phần chính: Net DataProvider và DataSet
ADO.Net
Trang 10Trương Phước Hải
Nội dung
10
1 Các mô hình truy xuất CSDL
2 Giới thiệu ADO.Net
3 Tổng quan kiến trúc ADO.Net
4 Kết nối CSDL bằng ADO.Net
Trang 11Tổng quan kiến trúc ADO.Net
ADO.NET
Data Consumers
WinForm
Other WebForm
Trang 12Trương Phước Hải
Phân loại Net Data Provider:
.Net Data Provider
12
Lập trình quản lý nâng cao
Trang 14Trương Phước Hải
Lưu trữ ở bộ nhớ trong (in-memory) các bảng dữ liệu, các lược đồ CSDL.
Thực thi cơ chế ngắt kết nối ( disconnected ) nhằm tăng hiệu năng truy xuất CSDL.
Mọi thao tác thay đổi dữ liệu được thực hiện trên
DataSet , không ảnh hưởng đến CSDL.
Sử dụng XML để truyền tải và lưu trữ dữ liệu.
Theo vết các thay đổi dữ liệu, cập nhật CSDL thông qua đối tượng DataAdapter
DataSet
14
Lập trình quản lý nâng cao
Trang 15Sơ đồ lớp đối tượng DataSet
Trang 16Trương Phước Hải
Nội dung
16
1 Các mô hình truy xuất CSDL
2 Giới thiệu ADO.Net
3 Tổng quan kiến trúc ADO.Net
4 Kết nối CSDL bằng ADO.Net
Trang 17 Bước 1 : khởi tạo đối tượng Connection với tham
số connection string đối với database tương ứng.
Bước 2 : thiết lập kết nối đến database bằng phương thức Open
Bước 3 : thực hiện các thao tác khai thác dữ liệu ( select , insert , delete , update ) từ database.
Bước 4 : đóng kết nối đến database bằng phương thức Close
Kết nối database server
m_Connection = new SqlConnection(ConStr)
m_Connection.Open()
m_Connection.Close()
Trang 18Trương Phước Hải
Kết nối database server
18
Lập trình quản lý nâng cao
Trang 19Kết nối database server
Imports System.Data.SqlClient
Public Class FrmLogin
Private m_Conn As SqlConnection
Private Sub cmdLogin_Click( )
Try
Dim ConStr As String = “Server = ” & sSrv & “;” & _
“User ID = ” & sUser & “;” & _
“Password = ” & sPass & “;” & _
“Database = ” & sDatabase & “;”
m_Conn = New SqlConnection(ConStr) m_Conn.Open()
MessageBox.Show( “Kết nối thành công” , “Successful” ) m_Conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, “Failed” )
End Try
Kết nối CSDL SQL Server bằng SqlClient
Trang 20Trương Phước Hải
Trang 21Thêm DataGrid control vào thanh công cụ
Kết nối CSDL bằng Wizard
Trang 22Trương Phước Hải
Kết nối CSDL bằng Wizard
22
Lập trình quản lý nâng cao
Chọn loại DataGrid cho ứng dụng WindowsForm
Trang 23Tạo kết nối CSDL bằng công cụ wizard.
Trang 24Trương Phước Hải
Chọn thuộc tính của bảng cần hiển thịtrong DataGrid
Kết nối CSDL bằng Wizard
24
Lập trình quản lý nâng cao
chọn dữ liệu cần truy vấn thiết lập datasourceDataGrid đã được
Trang 25Kết nối CSDL bằng Wizard
Kết quả thực thi chương trình
Trang 26Trương Phước Hải
Tạo Form gồm DataGrid và các nút lệnh
Truy xuất CSDL bằng VB.Net
Trang 27Bind dữ liệu từ DataSet vào DataGrid:
Bước 1 : khởi tạo đối tượng DataAdapter và thực thi truy vấn.
Bước 2 : khởi tạo đối tượng DataSet
Bước 3 : nạp kết quả truy vấn và đặt tên cho bảng dữ liệu chứa trong DataSet thông qua phương thức Fill
Bước 4 : bind dữ liệu từ DataSet vào DataGird bằng phương thức SetDataBinding
Truy xuất CSDL bằng VB.Net
m_Adapter = New SqlDataAdapter(m_Command) m_DataSet = New DataSet()
m_Adapter.Fill(m_DataSet, strName)
Trang 28Trương Phước Hải
Kết nối SQL Server bằng lớp SqlClient
Khai báo các biến thành viên
Truy xuất CSDL bằng VB.Net
28
Lập trình quản lý nâng cao
Imports System.Data
Imports System.Data.SqlClient
Public Class FrmDemo
Private m_Conn As SqlConnection
Private m_Cmd As SqlCommand
Private m_Adap As SqlDataAdapter
Private m_DataSet As DataSet
End Class
Trang 29Kết nối SQL Server bằng lớp SqlClient
Xây dựng hàm kết nối CSDL:Hàm trả về True
nếu kết nối thành công, ngược lại trả về FalseTruy xuất CSDL bằng VB.Net
Private Function Connect( ByVal ConStr As String )
As Boolean Try
m_Conn = New SqlConnection(ConStr) m_Conn.Open()
Catch Return False End Try
Return True End Function
Trang 30Trương Phước Hải
Kết nối SQL Server bằng lớp SqlClient
Xây dựng hàm thực thi truy vấn: tham số làcâu lệnh truy vấn Kết quả trả về đối tượng
DataAdapter
Truy xuất CSDL bằng VB.Net
30
Lập trình quản lý nâng cao
Private Function Excute( ByVal sCmd As String)
As SqlDataAdapter m_Cmd = New SqlCommand(sCmd, m_Conn)
Return New SqlDataAdapter(m_Cmd)
End Function
Trang 31Kết nối SQL Server bằng lớp SqlClient
Viết hàm đưa dữ liệu từ DataSet lên DataGrid
Truy xuất CSDL bằng VB.Net
Private Sub ShowData( ByVal Adap As SqlDataAdapter,
ByRef DataSet As DataSet,
ByRef DataGrid As DataGrid,
ByVal sName As String )
Adap.Fill(DataSet, sName)
DataGrid.SetDataBinding(DataSet, sName)
End Sub
Trang 32Trương Phước Hải
Kết nối SQL Server bằng lớp SqlClient
Viết code cho nút lệnh LoadData
Truy xuất CSDL bằng VB.Net
32
Lập trình quản lý nâng cao
Public Class FrmDemo
Private Sub cmdLoadData_Click( )
Dim ConStr As String = “Server=localhost;User ID=sa ;
Password =sa;Database=QLSach;”
If (Connect(ConStr) = True ) Then
m_Adap = Excute( “Select MaSach, TuaSach, TacGia,
GiaBan, From Sach” ) ShowData(m_Adap, m_DataSet, dgSach, “DMSach” )
Trang 33Đối tượng Connection cần phải được đóng
chương trình để giải phóng tài nguyên
Truy xuất CSDL bằng VB.Net
Private Sub FrmDemo_Closing( )
m_Conn.Dispose()
End Sub
Trang 34Trương Phước Hải
Truy xuất CSDL bằng VB.Net
Trang 35Các bước kết nối và khai thác CSDL ở các
tự nhau
Kiểu dữ liệu các biến thành phần.Net Data
Trang 36Trương Phước Hải
Kết nối SQL Server bằng lớp OleDb
Khai báo các biến thành viên
Truy xuất CSDL bằng VB.Net
36
Lập trình quản lý nâng cao
Imports System.Data
Imports System.Data.OleDb
Public Class FrmDemo
Private m_Conn As OleDbConnection
Private m_Cmd As OleDbCommand
Private m_Adap As OleDbDataAdapter
Private m_DataSet As DataSet
End Class
Trang 37Kết nối SQL Server bằng lớp OleDb
Truy xuất CSDL bằng VB.Net
Public Class FrmDemo
Private Sub cmdLoadData_Click( )
Dim ConStr As String = “Provider=SQLOLEDB;
Data Source=localhost;User ID=sa; Password =sa;Initial Catalog=QLSach;”
If (Connect(ConStr) = True ) Then
m_Adap = Excute( “Select MaSach, TuaSach, TacGia,
GiaBan, From Sach” ) ShowData(m_Adap, m_DataSet, dgSach, “DMSach” )
Trang 38Trương Phước Hải
Kết nối Access bằng lớp OleDb
Truy xuất CSDL bằng VB.Net
38
Lập trình quản lý nâng cao
Public Class FrmDemo
Private Sub cmdLoadData_Click( )
Dim ConStr As String = “Data Source=QLSach.MDB;
Provider=Microsoft.Jet.OLEDB.4.0;”
If (Connect(ConStr) = True ) Then
m_Adap = Excute( “Select MaSach, TuaSach, TacGia,
GiaBan, From Sach” ) ShowData(m_Adap, m_DataSet, dgSach, “DMSach” )
Trang 39Cách thức tương tự như với câu lệnh truyvấn T-SQL.
Thay câu lệnh truy vấn bằng tên stored
Truyền tham số là các giá trị nhận từ mànhình giao diện cho stored procedure
Truy vấn Stored Procedure
Trang 40Trương Phước Hải
Truy vấn Stored Procedure
Trang 41Xây dựng stored procedure tìm kiếm sáchdựa trên 2 tiêu chí tựa và tên NXB
Truy vấn Stored Procedure
CREATE PROC usp_TimKiem
@TuaSach nvarchar (200),
@TenNXB nvarchar (200)
AS
BEGIN
SELECT S.MaSach, S.TuaSach, S.TacGia, N.TenNXB, S.GiaBan
FROM Sach S INNER JOIN NhaXB N ON S.MaNXB = N.MaNXB
WHERE S.TuaSach like N „%‟ + @TuaSach + „%‟ AND
N.TenNXB = @TenNXB
END
GO
Trang 42Trương Phước Hải
Viết mã cho nút lệnh tìm kiếm
Truyền tên stored procedure
Truyền tham số cho stored procedure
Truy vấn Stored Procedure
42
Lập trình quản lý nâng cao
Dim pa As SqlParameter = New SqlParameter()
Trang 43Hàm GetParam:
Truy vấn Stored Procedure
Private Function GetParam( ByVal Name As String,
ByVal Type As SqlDbType,
ByVal Value As Object )
Return param
End Function
Trang 44Trương Phước Hải
Đưa dữ liệu vừa truy vấn được hiển thịtrên DataGrid:
Truy vấn Stored Procedure
44
Lập trình quản lý nâng cao
‟hủy tất cả bảng dữ liệu đang có trong DataSet
m_DataSet.Clear()
Trang 45Truy vấn Stored Procedure
Kết quả tìm kiếm theo 2 tiêu chí
Kết quả chạy chương trình
Trang 46Trương Phước Hải
Khi chỉ muốn duyệt trên toàn bộ dữ liệuthì DataReader tốt hơn DataSet
Đưa dữ liệu từ DataReader vào DataGrid:
Bước 1: tạo DataTable có các cột ứng với cáccột của lệnh truy vấn
Duyệt dữ liệu bằng DataReader
46
Lập trình quản lý nâng cao
Trang 47
Bước 2: đưa DataTable vừa tạo vào DataSet.
Bước 3: bind DataSet vào DataGrid
Duyệt dữ liệu bằng DataReader
m_DataSet.Tables.Add(Table)
DataGrid.SetDataBinding(m_DataSet, strTabName)
Trang 48Trương Phước Hải
Bước 4: duyệt xử lý từng dòng dữ liệu đọcđược từ DataReader bằng phương thức
Read và đưa vào DataSet
Duyệt dữ liệu bằng DataReader
m_Reader.GetValue(n).ToString() })
End While
Trang 49Ví dụ minh họa tìm kiếm sách:
Xây dựng hàm tạo bảng
Duyệt dữ liệu bằng DataReader
Private Sub CreateTable( ByRef Grid As DataGrid,
ByRef sName As String )
Dim Table As DataTable = New DataTable(sName)
Table.Columns.Add(New DataColumn( “STT” )) Table.Columns.Add(New DataColumn( “MaSach” )) Table.Columns.Add(New DataColumn( “TuaSach” )) Table.Columns.Add(New DataColumn( “TacGia” ))
m_DataSet.Tables.Add(Table) Grid.SetDataBinding(m_DataSet, sName)
End Sub
Trang 50Trương Phước Hải
Ví dụ minh họa tìm kiếm sách:
Viết hàm đưa dữ liệu từ DataReader lên Grid
Duyệt dữ liệu bằng DataReader
50
Lập trình quản lý nâng cao
Private Sub ShowData( ByRef Grid As DataGrid)
m_Reader = m_Cmd.ExecuteReader() ‟thực thi truy vấn
CreateTable(Grid, “KQTimKiem” )
Dim i As Integer = 0
While m_Reader.Read()
i += 1 m_DataSet.Tables(0).Rows.Add( New Object (){
i.ToString(), m_Reader.GetString(0), m_Reader.GetString(1), m_Reader.GetString(2)})
End While
m_Reader.Close()
End Sub
Trang 51 Dữ liệu thay đổi trong DataSet thông qua đối tượng DataAdapter để cập nhật CSDL.
Sử dụng đối tượng CommandBuilder để tạo lệnh cập nhật CSDL.
Cập nhật cơ sở dữ liệu
'tái lập kết nối đến CSDL
m_Connection.Open()
'thay đổi giá trị trong dataset
m_Dataset.Tables(0).Rows(0)(2) = "Trương Phước Hải“
'dùng CommandBuilder để tạo lệnh cập nhật
m_CmdBuilder = New SqlCommandBuilder(m_Adapter)
'cập nhật sự thay đổi dữ liệu trong DataTable đến CSDL
m_Adapter.Update(m_Dataset, "Sach" )
Trang 52Trương Phước Hải
Tích hợp khả năng hỗ trợ XML là đặc tínhnổi bật nhất của ADO.Net
XML là định dạng được dùng để xuất bản
và chuyển dữ liệu của DataSet
Giao tiếp XML
52
Lập trình quản lý nâng cao
'Lưu Dataset thành tập tin XML
m_Dataset.WriteXML( "books.xml" )
'Nạp dữ liệu từ XML vào Dataset
m_Dataset.ReadXML( "books.xml" )