Làm việc với DataSet

Một phần của tài liệu bài giảng lập trình windows (Trang 138)

a. Thêm một bảng vào DataSet:

Muốn đưa một DataTable (bảng) vào DataSet, chúng ta dùng phương thức Add của tập hợp Tables với các mẫu lệnh dưới đây:

1. <Dataset>.Tables.Add()

Một bảng mới tự động tạo ra với tên mặc nhiên (Table1, Table2,…) và đưa vào tập hợp Tables của DataSet

2. <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 3. <Dataset>.Tables.Add(<bảng>)

Chú ý: 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"

b. 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.

<DataSet>.Tables.AddRange(<mảng DataTable>)

Trong đó <mảng DataTable>: Là một mảng các DataTable đã tạo ra muốn đưa vào DataSet.

c. 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.

133 <DataSet>.Tables.Remove(<DataTable>)

2. 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>)

3. 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

d. 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 phương thức Clear của tập hợp Tables.

<DataSet>.Tables.Clear()

e. Kiểm tra bảng có thuộc về DataSet

<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.

f. Lấy chỉ số của bảng

1. <DataSet>.Tables.IndexOf(<tên DataTable>) Phương thức trả về chỉ số của DataTable có tên <tên DataTable>. 2. <DataSet>.Tables.IndexOf(<DataTable>) Phương thức trả về chỉ số của <DataTable>.

g. Lấy số bảng chứa trong DataSet <DataSet>.Tables.Count

h. Để kiểm tra dữ liệu của DataSet có thay đổi 1. <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.

134 2. <DataSet>.HasChanges(<trạng thái dòng>)

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. Lấy ra dòng dữ liệu đã thay đổi trong DataSet 1. <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).

2. <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

j. Để cập nhật các thay đổi trên DataSet <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.

k. Để hủy bỏ các thay đổi trên DataSet: <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.

l. Để trộn dữ liệu bên ngoài vào DataSet

Dữ liệu bên ngoà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 ngoài khác với cấu trúc của

135 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 ngoà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. 1. <DataSet>.Merge(<mảng dòng>) Trộn một mảng các dòng vào DataSet.

2. <DataSet>.Merge(<DataTable>) Trộn một DataTable bên ngoài vào DataSet. 3. <DataSet>.Merge(<DataSet>) Trộn một Dataset bên ngoài vào DataSet.

4. <DataSet>.Merge(<DataSet>,<giữ thay đổi>) Trộn một Dataset bên ngoà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 ngoài được giữ nguyên trên DataSet, là False không thay đổi theo bên ngoài.

5. <DataSet>.Merge(<DataSet>,<giữ thay đổi>, _ <xử lý khi cấu trúc khác nhau>)

Trộn một Dataset bên ngoà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.

6. <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 ngoài và cấu trúc của nó vào DataSet.

7. <DataSet>.Merge(<DataTable>,<giữ thay đổi>, _ <xử lý khi cấu trúc khác nhau>)

Trộn một DataTable bên ngoà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> được mô tả như sau:

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.

136 m. Để hủy bỏ DataSet

<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.

n. Để tạo một quan hệ giữa hai bảng trong DataSet:

Để thiết lập quan hệ cha-con giữa hai bảng (DataTable) trong một DataSet, phải thỏa yêu cầu sau:

 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.

1. <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 2. <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

3. <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.

4. DataSet>.Relations.Add(<tên quan hệ>, _ <DataColumn trên bảng cha>, _

<DataColumn trên bảng con>)

5. <DataSet>.Relations.Add(<tên quan hệ>, _ <mảng DataColumn trên bảng cha>, _

<mảng DataColumn trên bảng con>)

6. <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>)

7. <DataSet>.Relations.Add(<tên quan hệ>, _ <mảng DataColumn trên bảng cha>, _

137 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.

o. 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.

<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. p. Xóa quan hệ khỏi DataSet

Để xóa một quan hệ khỏi DataSet, chúng ta dùng các phương thức sau của tập hợp Relations.

1. <DataSet>.Relations.Remove(<quan hệ>) Xóa <quan hệ> khỏi tập hợp Relations của Dataset.

2. <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.

3. <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:

4. 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()

q. Kiểm tra quan hệ có thuộc về DataSet:

<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.

Một phần của tài liệu bài giảng lập trình windows (Trang 138)

Tải bản đầy đủ (PDF)

(180 trang)