I. DataSet
I.3. Các phương thức của DataSet
I.3.1. Thêm một bảng vào DataSet:
Muốn đưa một DataTable vào DataSet, chúng ta dùng phương thức Add của tập hợp Tables.
Cú pháp:
<Dataset>.Tables.Add()
DataSet
<Dataset>.Tables.Add(<tên bảng>)
Một bảng mới tựđộng tạo ra với tên là <tên bảng> và đưa vào tập hợp Tables <Dataset>.Tables.Add(<bảng>)
Đưa <bảng> vào tập hợp Tables
<bảng>: là một đối tượng DataTable muốn đưa vào DataSet (sẽđề cập đến trong phần sau)
Kinh nghiệm giảng dạy:
Tên bảng trong DataSet cĩ phân biệt chữ HOA chữ thường. Nghĩa là cĩ thể cĩ 2 bảng tên "table1" và "Table1"
Ví dụ:
Imports SysTem.Data …
Dim dst As New DataSet("Ví dụ") Dim bang As New DataTable("Bảng 1") Dst.Tables.Add(bang)
I.3.2. Thêm nhiều bảng vào DataSet:
Muốn đưa nhiều bảng vào DataSet, chúng ta dùng phương thức AddRange của tập hợp Tables.
Cú pháp:
<DataSet>.Tables.AddRange(<mảng DataTable>)
<mảng DataTable>: Là một mảng các DataTable đã tạo ra muốn đưa vào DataSet Ví dụ:
Dim dst As New DataSet("Ví dụ") Dim bang1 As New DataTable("Bảng 1") Dim bang2 As New DataTable("Bảng 2")
dst.Tables.AddRange(New DataTable(){bang1,bang2})
I.3.3. Xĩa bảng khỏi DataSet:
Để xĩa một bảng khỏi DataSet, chúng ta dùng các phương thức sau của tập hợp Tables.
Cú pháp:
Xĩa <DataTable> khỏi tập hợp Tables của DataSet. <DataSet>.Tables.Remove(<DataTable>)
Xĩa <DataTable> cĩ tên là <tên bảng> khỏi tập hợp Tables của DataSet. <DataSet>.Tables.Remove(<tên bảng>)
Xĩa <DataTable> cĩ chỉ số là <chỉ số> khỏi tập hợp Tables của DataSet.
<DataSet>.Tables.RemoveAt(<chỉ số>)
Tuy nhiên, bảng cĩ thểđang hiển thị dữ liệu trên Form nên chúng ta cần kiểm tra xem cĩ thể xĩa được khơng với cú pháp:
<DataSet>.Tables.CanRemove(<DataTable>) Phương thức trả về True cĩ thể xĩa, ngược lại là False.
Ví dụ:
Dim bang As DataTable = dst.Tables(0) If dst.Tables.CanRemove(bang) then dst.Tables.Remove(bang)
End If
I.3.4. Xĩa tất cả các bảng khỏi DataSet
Để xĩa tất cả các bảng khỏi DataSet, chúng ta dùng các phương thức sau của tập hợp Tables.
Cú pháp:
<DataSet>.Tables.Clear()
I.3.5. Kiểm tra bảng cĩ thuộc về DataSet Cú pháp:
<DataSet>.Tables.Contains(<tên DataTable>)
Phương thức trả về True nếu trong Tables cĩ DataTable cĩ tên <tên DataTable>, ngược lại là False.
I.3.6. Lấy chỉ số của bảng Cú pháp:
<DataSet>.Tables.IndexOf(<tên DataTable>)
Phương thức trả về chỉ số của DataTable cĩ tên <tên DataTable>. <DataSet>.Tables.IndexOf(<DataTable>)
Phương thức trả về chỉ số của <DataTable>.
I.3.7. Lấy số bảng chứa trong DataSet Cú pháp:
<DataSet>.Tables.Count
I.3.8. Để kiểm tra dữ liệu của DataSet cĩ thay đổi Cú pháp:
<DataSet>.HasChanges()
Phương thức kiểm tra sự thay đổi của tất cả các dịng dữ liệu trên các bảng (thêm mới, xĩa bỏ, sửa
đổi) và trả về True nếu cĩ, ngược lại False.
Phương thức kiểm tra sự thay đổi của tất cả các dịng dữ liệu trên các bảng cĩ trạng thái như <trạng thái dịng> và trả về True nếu cĩ, ngược lại False..
I.3.9. Lấy ra dịng dữ liệu đã thay đổi trong DataSet Cú pháp:
<DataSet>.GetChanges()
Phương thức trả về bản sao của DataSet gồm những dịng dữ liệu đã bị thay đổi trên các bảng (do thêm mới, xĩa bỏ, sửa đổi).
<DataSet>.GetChanges(<trạng thái dịng>)
Phương thức trả về bản sao của DataSet gồm những dịng dữ liệu đã bị thay đổi cĩ trạng thái như
<trạng thái dịng>.
Ví dụ:
Dim ds As DataSet
If dst.HasChanges() then ds = dst.GetChanges() …
If dst.HasChanges(DataRowState.Modified) then ds = dst.GetChanges(DataRowState.Modified) End If
I.3.10. Để cập nhật các thay đổi trên DataSet Cú pháp:
<DataSet>.AcceptChanges()
Phương thức cập nhật các thay đổi kể từ lúc lấy dữ liệu về hoặc từ lần gọi AcceptChanges trước.
Trên DataTable, DataRow cũng cĩ phương thức tương ứng. Khi gọi AcceptChanges của DataSet sẽ kéo theo gọi AcceptChanges của DataTable, đến lượt kéo theo gọi AcceptChanges của DataRow.
I.3.11. Để hủy bỏ các thay đổi trên DataSet: Cú pháp:
<DataSet>.RejectChanges()
Phương thức này của DataSet phục hồi tất cả các thay đổi kể từ lúc lấy dữ liệu về hoặc từ lần gọi AcceptChanges trước.
Khi gọi RejectChanges của DataSet sẽ kéo theo gọi RejectChanges của DataTable, DataRow.
I.3.12. Để trộn dữ liệu bên ngồi vào DataSet
Dữ liệu bên ngồi cĩ thể là các dịng (mảng dịng), DataTable hoặc một DataSet khác.
Nguyên tắc của phương thức này như sau: khi được gọi, cấu trúc của nguồn và đích được so sánh với nhau. Nếu cấu trúc dữ liệu bên ngồi khác với cấu trúc của DataSet do thêm cột, các cột mới sẽ được thêm vào DataSet (tùy cú pháp) cùng với dữ liệu. Trên dữ liệu bên ngồi, những dịng cĩ tình trạng Unchanged, Modified và Deleted phải cĩ cột khĩa chính như những dịng đã cĩ trên DataSet. Những dịng cĩ tình trạng Added (thêm mới) phải thỏa ràng buộc về khĩa chính của DataSet.
Trong quá trình trộn lẫn dữ liệu, các ràng buộc được bỏ qua: thuộc tính EnforceConstraints cĩ giá trị
False. Cuối quá trình, nếu ràng buộc nào khơng thể chuyển lại True sẽ làm phát sinh một Exception. Vì vậy, chúng ta cần giải quyết các vi phạm ràng buộc trước khi gán EnforceConstraints với giá trị True. Phương thức này cĩ rất nhiều cách sử dụng.
Cú pháp:
<DataSet>.Merge(<mảng dịng>) Trộn một mảng các dịng vào DataSet.
<DataSet>.Merge(<DataTable>) Trộn một DataTable bên ngồi vào DataSet.
<DataSet>.Merge(<DataSet>) Trộn một Dataset bên ngồi vào DataSet.
<DataSet>.Merge(<DataSet>,<giữ thay đổi>) Trộn một Dataset bên ngồi và cấu trúc của nĩ vào DataSet.
<giữ thay đổi>: nếu là True, các thay đổi từ bên ngồi được giữ nguyên trên DataSet, là False khơng thay đổi theo bên ngồi.
<DataSet>.Merge(<DataSet>,<giữ thay đổi>,<xử lý khi cấu trúc khác nhau>) Trộn một Dataset bên ngồi và cấu trúc của nĩ vào DataSet.
<xử lý khi cấu trúc khác nhau>: tùy theo giá trị truyền vào.
<DataSet>.Merge(<mảng dịng>,<giữ thay đổi>,<xử lý khi cấu trúc khác nhau>) Trộn một mảng dịng bên ngồi và cấu trúc của nĩ vào DataSet.
<DataSet>.Merge(<DataTable>,<giữ thay đổi>,<xử lý khi cấu trúc khác nhau>) Trộn một DataTable bên ngồi và cấu trúc của nĩ vào DataSet.
Các giá trị của <xử lý khi cấu trúc khác nhau>
Tên Mơ tả
Add Nếu khác nhau, thêm các cột mới vào cấu trúc của DataSet. Error Nếu khác nhau phát sinh lỗi.
Ignore Nếu khác nhau, bỏ qua các cột mới.
I.3.13. Để hủy bỏ DataSet Cú pháp:
<DataSet>.Dispose()
Khi được gọi, mọi tài nguyên trên vùng nhớ mà DataSet đang sử dụng sẽđược giải phĩng.
I.3.14. Để tạo một quan hệ giữa hai bảng trong DataSet:
Field hoặc các Field của bảng cha trong quan hệ phải thỏa yêu cầu tính duy nhất.
Chỉ cĩ thể thiết lập quan hệ giữa hai bảng trong cùng DataSet
Chúng ta sử dụng phương thức Add của tập hợp Relations trong DataSet với các cú pháp sau.
Cú pháp:
<DataSet>.Relations.Add(<đối tượng DataRelation>)
<đối tượng DataRelation>: đối tượng này phải được tạo sẵn sẽđề cập ở phần sau
<DataSet>.Relations.Add(<DataColumn trên bảng cha>, <DataColumn trên bảng con>)
<DataColumn trên bảng cha>, <DataColumn trên bảng con>: Các đối tượng này thuộc lớp DataColumn sẽđề cập ở phần sau là các cột tham gia quan hệ trên bảng cha và bảng con tương ứng
<DataSet>.Relations.Add(<mảng DataColumn trên bảng cha>, _ <mảng DataColumn trên bảng con>)
<mảng DataColumn trên bảng cha>, <mảng DataColumn trên bảng con>: Các mảng này là mảng các cột tham gia quan hệ trên bảng cha và bảng con tương ứng.
<DataSet>.Relations.Add(<tên quan hệ>, <DataColumn trên bảng cha>, _ <DataColumn trên bảng con>)
<DataSet>.Relations.Add(<tên quan hệ>, <mảng DataColumn trên bảng cha>, _ <mảng DataColumn trên bảng con>)
<DataSet>.Relations.Add(<tên quan hệ>, <DataColumn trên bảng cha>, _ <DataColumn trên bảng con>, <tạo ràng buộc>)
<DataSet>.Relations.Add(<tên quan hệ>, <mảng DataColumn trên bảng cha>, _ <mảng DataColumn trên bảng con>, <tạo ràng buộc>)
Mặc định, khi tạo quan hệ giữa hai bảng, các ràng buộc đồng thời được tạo ra cho trên mỗi bảng như
sau:
Ràng buộc duy nhất trên bảng cha dựa vào các cột của bảng cha tham gia vào quan hệ (nếu chưa cĩ)
Ràng buộc khĩa ngoại trên bảng con dựa vào các cột trên bảng cha và bảng con trong quan hệ. Tham số <tạo ràng buộc> cho phép chúng ta quy định cĩ tạo ràng buộc hay khơng: True cĩ tạo, False khơng tạo.
I.3.15. Thêm nhiều quan hệ vào DataSet:
Muốn đưa nhiều quan hệ cĩ sẵn vào DataSet, chúng ta dùng phương thức AddRange của tập hợp Relations.
Cú pháp:
<DataSet>.Relations.AddRange(<mảng quan hệ>)
<mảng quan hệ>: là một mảng các quan hệđã tạo ra muốn đưa vào DataSet.
I.3.16. Xĩa quan hệ khỏi DataSet
Cú pháp:
<DataSet>.Relations.Remove(<quan hệ>) Xĩa <quan hệ> khỏi tập hợp Relations của Dataset.
<DataSet>.Relations.Remove(<tên quan hệ>) Xĩa quan hệ cĩ tên là <tên quan hệ> khỏi tập hợp Relations.
<DataSet>.Relations.RemoveAt(<chỉ số>) Xĩa quan hệ cĩ chỉ số là <chỉ số> khỏi tập hợp Relations.
Tuy nhiên, quan hệ cĩ thể đang được sử dụng nên chúng ta cần kiểm tra xem cĩ thể xĩa được khơng với cú pháp:
<DataSet>.Relations.CanRemove(<quan hệ>) Phương thức trả về True cĩ thể xĩa, ngược lại là False.
Để hủy tất cả các quan hệ trong DataSet, chúng ta dùng các phương thức sau của tập hợp Relations: <DataSet>.Relations.Clear()
I.3.17. Kiểm tra quan hệ cĩ thuộc về DataSet: Cú pháp:
<DataSet>.Relations.Contains(<tên quan hệ>)
Phương thức trả về True nếu trong Relations cĩ quan hệ tên <tên quan hệ>, ngược lại là False