Đây là lớp làm việc trực tiếp với nguồn dữ liệu. Với vai trị đọc dữ liệu về cho ứng dụng cũng như cập nhật các thay đổi từ phía người dùng vào nguồn dữ liệu, lớp sẽ cĩ các thuộc tính, chức năng hổ trợ cho các vai trị này. Khi tạo lớp, cần thực hiện:
Phân chia các Region để tiện việc quản lý các thuộc tính, sự kiện và phương thức
Truy xuất dữ liệu của bảng được thực hiện thơng qua DefaultView của DataTable
Người
Xử lý thể hiện
Xử lý nghiệp vụ
Dữ liệu Xử lý lưu trữ
II.1. Các khai báo
Đây là nhĩm khai báo các biến thành viên, hằng cần sử dụng bên trong lớp và thường được khai báo với từ khĩa Private:
Khai báo đối tượng truy xuất cập nhật dữ liệu(DataAdapter): đối tượng này đĩng vai trị đọc ghi dữ
liệu cho lớp xử lý lưu trữ
Biến chuỗi chứa nội dung truy vấn dữ liệu
Biến chuỗi chứa tên bảng muốn truy vấn dữ liệu
Biến đối tượng dùng chung kết nối đến nguồn dữ liệu.
Ví dụ:
Imports System.Data
Imports System.Data.OleDb Module PHAN_MEM
Public Const Chuoi_lien_ket As String = _
"Provider=Microsoft.JET.OLEDB.4.0;" End Module
Public Class XL_BANG Inherits DataTable #Region "Khai báo cục bộ "
' Khai báo đối tượng đọc ghi dữ liệu trên CSDL Private WithEvents mBo_doc_ghi As OleDbDataAdapter ' Khai báo biến chuỗi chứa nội dung truy vấn dữ liệu Private mChuoi_SQL As String
' Khai báo biến chuỗi chứa tên bảng muốn truy vấn dữ liệu Private mTen_bang As String
' Khai báo biến đối tượng dùng chung kết nối đến nguồn dữ liệu Private Shared mKet_noi As OleDbConnection
#End Region . . .
End Class
II.2. Khai báo các thuộc tính
Đây là phần khai báo các thuộc tính của lớp xử lý lưu trữ cho phép truy xuất từ bên ngồi lớp thường
được khai báo với từ khĩa Public:
Ví dụ: XL_BANG: phần khai báo các thuộc tính #Region " Khai báo các thuộc tính "
Public Shared Chuoi_CSDL As String
' Thuộc tính cho phép đọc và ghi nội dung truy vấn dữ liệu cần thực hiện cho thể hiện
Public Property Chuoi_SQL() As String Get
Return mChuoi_SQL End Get
Set(ByVal Value As String) mChuoi_SQL = Value End Set
End Property
' Thuộc tính cho phép truy xuất và gán tên bảng muốn truy vấn dữ liệu Public Property Ten_bang() As String
Get
Return mTen_bang End Get
Set(ByVal Value As String) mTen_bang = Value
End Set End Property
' Thuộc tính chứa đối tượng kết nối đến nguồn dữ liệu Public Shared Property Ket_noi() As OleDbConnection Get
Return mKet_noi End Get
Set(ByVal Value As OleDbConnection) mKet_noi = Value
End Set End Property
' Thuộc tính chỉ đọc cho biết số dịng trên DefaultView của DataTable Public ReadOnly Property So_dong() As Long
Get
Return Me.DefaultView.Count End Get
End Property #End Region
II.3. Khai báo phương thức khởi tạo
Nhĩm gồm những hàm khởi tạo đối tượng chứa dữ liệu, đồng thời khởi tạo các đối tượng thực hiện đọc ghi dữ liệu:
Ví dụ: XL_BANG: phần khai báo các hàm khỏi tạo #Region " Khai báo phương thức khởi tạo "
' Thủ tục khởi tạo một thể hiện DataTable chưa cĩ cấu trúc và dữ liệu Public Sub New()
MyBase.New() End Sub
' Thủ tục khởi tạo đọc tồn bộ bảng
Public Sub New(ByVal pTen_bang As String) MyBase.New(pTen_bang)
mTen_bang = pTen_bang Doc_bang()
End Sub
' Thủ tục khởi tạo đọc bảng theo nội dung yêu cầu
Public Sub New(ByVal pTen_bang As String, ByVal pChuoi_SQL As String) MyBase.New(pTen_bang) mTen_bang = pTen_bang mChuoi_SQL = pChuoi_SQL Doc_bang() End Sub #End Region
II.4. Khai báo phương thức xử lý - cung cấp thơng tin
Nhĩm gồm những chức năng xử lý và cung cấp thơng tin:
Ví dụ: XL_BANG: phần khai báo các phương thức xử lý – cung cấp thơng tin #Region " Khai báo phương thức xử lý – cung cấp thơng tin "
' Thủ tục khởi tạo đối tượng đọc ghi dữ liệu và khai báo thơng tin cho đối tượpng kết nối
' Thực hiện lấy cấu trúc và dữ liệu vào DataTable. Sau cùng phát sinh các lệnh cập nhật
Private Sub Doc_bang()
If mChuoi_SQL = "" Then mChuoi_SQL = "SELECT * FROM " & mTen_bang If mKet_noi Is Nothing Then
mKet_noi = New OleDbConnection
mKet_noi.ConnectionString = Chuoi_lien_ket & "Data Source=" & Chuoi_CSDL
End If Try
mBo_doc_ghi = New OleDbDataAdapter(mChuoi_SQL, mKet_noi) mBo_doc_ghi.Fill(Me)
mBo_doc_ghi.FillSchema(Me, SchemaType.Mapped)
mBo_doc_ghi.SelectCommand.CommandText = "Select * FROM " & mTen_bang
Dim Bo_phat_sinh As New OleDbCommandBuilder(mBo_doc_ghi) Catch ex As OleDbException
End Try End Sub
' Hàm cập nhật các thay đổi trên DataTable vào CSDL và cập nhật các dịng trên DataTable
' về trạng thái khơng thay đổi. Nếu cập nhật được, hàm trả về True; ngược lại, bỏ qua các
' thay đổi và trả về False
Public Function Ghi() As Boolean Dim ketqua As Boolean = True Try mBo_doc_ghi.Update(Me) Me.AcceptChanges() Catch e As Exception Me.RejectChanges() ketqua = False End Try Return ketqua End Function
' Thủ tục lọc dữ liệu của DefaultView theo điều kiện lọc truyền vào Public Sub Loc_du_lieu(ByVal pDieu_kien As String)
Try Me.DefaultView.RowFilter = pDieu_kien Catch ex As Exception End Try End Sub #End Region
II.5. Khai báo các phương thức thực hiện lệnh
Nhĩm gồm những hàm, thủ tục cung cập chức năng thực hiện lệnh:
Ví dụ: XL_BANG: Khai báo các phương thức thực hiện lệnh
#Region " Khai báo các phương thức thực hiện lệnh "
' Hàm thực hiện nội dung lệnh truyền vào và trả về số mẩu tin được cập nhật, nếu thành
' cơng. Nếu khơng thành cơng, hàm trả về -1
Public Function Thuc_hien_lenh(ByVal Lenh As String) As Integer Try
Dim Cau_lenh As New OleDbCommand(Lenh, mKet_noi) mKet_noi.Open()
Dim ket_qua As Integer = Cau_lenh.ExecuteNonQuery() mKet_noi.Close() Return ket_qua Catch ex As OleDbException Return -1 End Try End Function
' Hàm thực hiện nội dung lệnh tính tốn thống kê truyền vào và trả về kết quả, nếu thành
' cơng. Nếu khơng thành cơng, hàm trả về Nothing
Public Function Thuc_hien_lenh_tinh_toan(ByVal Lenh As String) As Object Try
Dim Cau_lenh As New OleDbCommand(Lenh, mKet_noi) mKet_noi.Open()
Dim ket_qua As Object = Cau_lenh.ExecuteScalar mKet_noi.Close() Return ket_qua Catch ex As OleDbException Return Nothing End Try End Function #End Region
II.6. Nhĩm xử lý sự kiện
Ví dụ: XL_BANG: Xử lý sự kiện #Region " Xử lý sự kiện "
' Khi khĩa chính là cột tự động tăng, giá trị cột này được CSDL tự ' phát sinh nên cần truy xuất về để sử dụng cho việc cập nhật sau đĩ. Private Sub mBo_doc_ghi_RowUpdated(ByVal sender As Object, ByVal e As _
System.Data.OleDb.OleDbRowUpdatedEventArgs) _
Handles mBo_doc_ghi.RowUpdated
If e.Status = UpdateStatus.Continue AndAlso _
e.StatementType = StatementType.Insert Then
'Lấy gía trị AutoNumber
If Me.PrimaryKey(0).AutoIncrement Then
Dim lenh As New OleDbCommand("Select @@IDENTITY", mKet_noi) e.Row.Item(0) = lenh.ExecuteScalar() e.Row.AcceptChanges() End If End If End Sub #End Region