Phần này, chúng ta bước vào phần chính của ADO.NET. Đó là làm việc với mô hình phi kết nối nhưng trước hết trong ví dụ dưới đây ta sẽ bỏ qua việc lưu trữ vào XML mà tạm thời dùng bộ nhớ tạm thôi.
Có nghĩa là, dữ liệu từ database được lấy lên và đổ vào Dataset. Sau đó ta có thể ngắt kết nối tới database, lúc này dữ liệu tạm thời nằm ở dataset và ta sẽ thao tác với nó (Thêm, Sửa, Xóa). Sau khi thao tác xong, bạn có thể đồng bộ với database vẫn thông qua DataAdapter. Trong ví dụ dưới đây chúng ta có dùng SqlCommandBuilder để làm việc ngầm thay cho DataAdapter, giảm bớt thao tác code.


Mã Code trong mô hình phi kết nối dưới đây bao gồm các bước.
  • Kết nối với SQL Server
  • Tạo Dataset bao gồm một hoặc nhiểu Table tương ứng để chứa dữ liệu được tải lên.
  • Tải dữ liệu từ database lên và đổ chúng vào dataset với các Table tương ứng.
  • Ngắt kết nối với SQL Server
  • Thao tác thêm, sửa, xóa trên dataset. Hiển thị thông qua Gridview.
  • Lưu dữ liệu từ Dataset vào XML
  • Đồng bộ xuống database. Done !



Data Apdater
Đối với DataApdater là cầu nối giữa dataset và database nhưng với mỗi đối tượng data apdater chỉ xử lý 1 bảng trong dataset. Bạn cần lưu ý điểm này, không dùng chung trên các bảng dữ liệu khác nhau. Vẫn có phương pháp để sử dụng một đối tượng Data apdater . . .

Phần 4: MÔ HÌNH PHI KẾT NỐI

1. Kết Nối Server

- Trong các ví dụ trước ta đã biết cách kết nối tới database. Ở đây vẫn dùng cách đó, bạn hãy tham khảo lại.

2. Khởi Tạo Dataset

Trước đó trong class của chúng ta đã khai báo lớp dataset dùng cho toàn class.

private DataSet _dataset;


private void ManualDataset()
{
// B1: Tạo mới đối tượng Dataset. Với tên do bạn chỉ định 
hoặc để trống
_dataset = new DataSet("MyDataClient");

// B2: Tạo mới một bảng để thêm vào dataset ở trên
var table1 = new DataTable("SinhVien");

// B3: Add table SinhVien vừa tạo vào dataset MyDataClient
_dataset.Tables.Add(table1);

// B4: Tạo cột (column). Riêng hàng (row) dùng để làm việc với 
dữ liệu, vì nó đại diện cho một hàng. Ta dùng nó để thao tác 
Insert, Update, Delete
var col11 = new DataColumn("MaSV", typeof(string));
var col12 = new DataColumn("HoTenSV", typeof(string));
var col13 = new DataColumn("NgaySinh", typeof(DateTime));
var col14 = new DataColumn("QueQuan", typeof(string));
var col15 = new DataColumn("MaKhoa", typeof(string));

// B5: Add column vào table SinhVien trong dataset: MyDataClient
table1.Columns.Add(col11);
table1.Columns.Add(col12);
table1.Columns.Add(col13);
table1.Columns.Add(col14);
table1.Columns.Add(col15);
//table.Columns.Add("MaSV", Type.GetType("System.String"));

/************************************************************/
//Tương tự ta tạo tiếp bảng Khoa và add vào dataset MyDataClient
var table2 = new DataTable("Khoa");
_dataset.Tables.Add(table2);
var col21 = new DataColumn("MaKhoa", typeof(string));
var col22 = new DataColumn("TenKhoa", typeof(string));

table2.Columns.Add(col21);
table2.Columns.Add(col22);
}

Hàm trên là một cách tùy chỉnh cho bạn hiểu dataset gồm những gì. Hãy đặt vào hàm Form_Load để nó được khởi tạo luôn lúc chương trình khởi động hoặc thực thi trước khi tải dữ liệu từ database lên.

3. Tải Dữ Liệu Lên Và Đổ Vào Dataset

Ta sẽ tải cả hai bảng SinhVien, Khoa. Riêng bảng SinhVien cần thêm, sửa, xóa nên ta dùng thêm SqlCommandbuilder. Nếu bảng khoa thao tác, bạn làm tương tự.


private void GetAllTableToDataset()
{
/* Phần A: Xử lý với bảng SinhVien
* B1: Thông qua SqlDataApdater và SqlConnection lấy dữ liệu lên
* B2: Nạp đối tượng SqlDataApdater mà chúng ta đã khởi tạo 
dành riêng cho SinhVien vào SqlCommandBuilder ...
* ...để nó làm việc ngầm cho ta. Như thế việc đồng bộ 
từ dataset <=> database sẽ đơn giản hơn. 
* B3: Đổ dữ liệu đã lấy được vào _dataset.Table["SinhVien"]. 
Trước đó ta đã khởi tạo 2 table trong dataset thứ tự 0,1.....
* B4: Có thể đổ dữ liệu từ Table trong Dataset ra GridView 
để xem cụ thể
*/

_dasinhvien = new SqlDataAdapter
{
SelectCommand = new SqlCommand("SELECT * FROM SinhVien", _con)
};
_cmdbdsinhvien = new SqlCommandBuilder(_dasinhvien);

_dasinhvien.Fill(_dataset.Tables["SinhVien"]);
gvSinhVien.DataSource = _dataset.Tables[0];  
// Table[0] tương đương Table["SinhVien"]

/* Phần B: Xử lý với bảng Khoa*/
_dakhoa = new SqlDataAdapter
{
SelectCommand = new SqlCommand("SELECT * FROM Khoa", _con)
};
_dakhoa.Fill(_dataset, "Khoa");
//Đổ ra Combbobox
cbbMakhoa.DataSource = _dataset.Tables[1];
cbbMakhoa.ValueMember = _dataset.Tables[1].Columns[0].ColumnName; 
//MaKhoa
cbbMakhoa.DisplayMember = "TenKhoa"; // Tương tự lệnh trên ;))
// Đổ ra Gridview
gvKhoa.DataSource = _dataset.Tables[1]; 
// Table[1] tương đương Table["Khoa"]
}



4. Ngắt Kết Nối Tới Server

Sau khi tải dữ liệu xong và đổ vào dataset thì ngắt kết nối. Gọi hàm ngắt kết nối, OK

5. Thao Tác Dữ Liệu Trên Dataset

Bao gồm các thao tác cơ bản: Insert, Update, Delete.
Yên tâm là bạn có thể thêm, bớt thoải mái nhiểu record trước khi qua bước cập nhật xuống database.
Ở bước này, bạn có thể code thêm mã xử lý việc hoàn nguyên dataset nếu như ta ko muốn lưu bằng cách đơn giản nhất là Clear() Table đó trong dataset và tải lại.
a. hàm thêm mới dữ liệu. 

 private void InsertDataset()
{
var datarow = _dataset.Tables["SinhVien"].NewRow();
datarow[0] = txtMasv.Text;
datarow[1] = txtHoten.Text;
datarow[2] = dtpNgaysinh.Text;
datarow[3] = txtQuequan.Text;
datarow[4] = cbbMakhoa.SelectedValue;
_dataset.Tables[0].Rows.Add(datarow);

}

Đầu vào từ các control : Textbox, Combbobox.....

b. sửa dữ liệu ban đầu

private void UpdateDataset()
{

var temp = txtMasv.Text;
var datarows = _dataset.Tables[0].Select("MaSV =" + "'" + temp + "'");
datarows[0][1] = txtHoten.Text;
datarows[0][2] = dtpNgaysinh.Text;
datarows[0][3] = txtQuequan.Text;
datarows[0][4] = cbbMakhoa.SelectedValue;
// Gán như vậy có nghĩa. Row[vị trí hàng][vị trí cột] 
của Table[vị trí] của Dataset  đã được thay đổi.

}

c. xóa dữ liệu


private void DeleteDataset()
{
if (gvSinhVien.CurrentRow != null)
_dataset.Tables[0].Rows[gvSinhVien.CurrentRow.Index].Delete();
}

Cách này lấy vị trí record trên Gridview của bạn và xóa nó trong Table của Dataset.

Cách khác bạn xác định vị trí index của record trong table thông qua MaSV nhập vào.

            var temp = txtMasv.Text;
var datarows = _dataset.Tables[0].Select("MaSV =" + "'" + temp 
+ "'");
foreach (var datarow in datarows)
{
var index = _dataset.Tables[0].Rows.IndexOf(datarow);
_dataset.Tables[0].Rows[index].Delete();
}

6. Đồng Bộ Dataset Với Databbase


Dùng lệnh update của Data Apdater:

 _dasinhvien.Update(_dataset, "SinhVien");

Như vậy quá trình thực thi của mô hình này đã hoàn tất.
Demo
B1: Nhấn Connect
B2: Get Data
B3: Insert,Update, Delete
B4: Save

Cập nhật: 03/03/2014

Hãy tải về mã nguồn của ví dụ 2.2.1 này để thực hành:


Hoặc

thumbnail ADO.NET: Mô Hình Phi Kết Nối Với SQL Server – Phần 4

data:label.name author

premiumpng.com

Design Publisher

Download 0
No comments
Template in .PSD format

MR Laboratory License

Free for personal purpose use . More info


Buy Now This Template

No comments:

Post a Comment

Commets Download Photoshop Actions, Lightroom Presets, PSD Template, Mockups, Stocks, Vectors, Fonts. Download free

Newer Post Older Post Home

Copyright © 2021 MR Laboratory All rights reserved.

Setting