Hầu hết mọi ứng dụng đều sử dụng nhiều thời gian cho việc đọc và hiển thị dữ liệu, vì thế ADO.Net đã cung cấp một tập hợp con các đối tượng dữ liệu không kết nối cho các ứng dụng để ngườ
Trang 1Kết nối CSDL
Trong thực tế, có rất nhiều ứng dụng cần tương tác với cơ sở dữ liệu .Net Framework cung cấp một tập các đối tượng cho phép truy cập vào cơ sở dữ liệu, tập các dữ liệu nàu gọi chung ADO.Net ADO.Net kết nối vào cơ sở dữ liệu để lấy
dữ liệu và kết nối trở lại để cập nhật dữ liệu khi người dùng thay đổi chúng Hầu hết mọi ứng dụng đều sử dụng nhiều thời gian cho việc đọc và hiển thị dữ liệu, vì thế ADO.Net đã cung cấp một tập hợp con các đối tượng dữ liệu không kết nối cho các ứng dụng để người dùng có thể đọc và hiển thị chúng mà không cần kết nối vào cơ sở dữ liệu
4.1.Cơ sở dữ liệu và ngôn ngữ truy vấn SQL.
Để có thể hiểu rõ cách làm việc ADO.Net, chúng ta cần nắm một số khái niệm
cơ bản về cơ sở dữ liệu quan hệ và ngôn ngữ truy vấn dữ liệu như : khái niệm dòng, cột, bảng, quan hệ giữa các bảng, khóa ngoại, khóa chính, và cách truy vấn trên các bảng bằng ngôn ngữ truy vấn SQL: Seclect, Update, Delete, Insert… Một
số hàm count, sum, avg, min, max ,hay cách viết thủ tục Store Procedure
4.2.Kiến trúc ADO.NET
ADO.Net là tên của tập các lớp nằm trên namespace:
System.Data.System.Data.Common
System.Data.SqlTypes
System.Data.SqlClient
System.Data.OleDb;
ADO được chia làm 2 phần chính rõ rệt, được thể hiện qua hình
Trang 2Hình 4.1
Dataset là thành phần chính cho đặc trưng kết nối không liên tục của cấu trúc ADO.Net Dataset được thiết kế có thể thích ứng với bất kì nguồn dữ liệu nào Dataset chứa một hay nhiều đối tượng DataTable mà nó được tạo ra từ tập các dòng và cột dữ liệu, cùng với khóa chính, khóa ngoại ràng buộc và các thông tin liên quan đến đối tượng DataTable này Bản thân DataSet được xem dạng tập tin XML
Thành phần thứ hai Provide Data nó chứa các đối tượng phục vụ cho việc thao tác trên cơ sở dữ liệu được hiệu quả và nhanh chóng, nó bao gồm một tập các đối tượng Connection, Command, DataReader và DataAdapter Đối tượng Connection cung cấp kết nối đến cơ sở dữ liệu, Command cung cấp một thao tác đến cơ sở dữ liệu, DataReader cho phép chỉ đọc dữ liệu, DataAdapter cầu nối trung gian giữa cơ
sở dữ liệu và DataSet
4.3.DataProvider.
4.3.1 DataProvider có 5 loại đối tượng:
- Connection
- Command
- DataReader
Trang 3- Parameter
- DataAdapter
4.3.2 DataProvider có hai trình cung cấp dữ liệu:
+ SQL Sever Data Provider bao gồm các đối tượng sau:
- SqlConnection
- Sql Command
- Sql Parameter
- Sql DataAdapter
- Sql DataReader
+ OLE DB Data Provider bao gồm các đối tượng sau:
- OleDbConnection
- OleDbCommand
- OleDb Parameter
- OleDb DataAdapter
- OleDb DataReader
4.3.3 Đối tượng SqlConnection và SqlCommand.
Đối tượng SqlConnection đại diện cho một kết nối đến cơ sở dữ liệu, đối tượng này có thể được dùng chung cho các đối tượng SqlCommand khác Đối tượng SqlCommand cho phép thực hiện một câu truy vấn trực tiếp như: SELECT, UPDATE, hay DELETE hay gọi thủ tục (Store Proceduce) từ cơ dở dữ liệu
Ví dụ:
//Tao kết nối
SqlConnection cnn = new SqlConnection();
//Kết nối đên sever local, tên CSDL sử dung sever có tên Northwind; SSPI
để dùng cho Windows authentication
cnn.ConnectionString = "Data Source=(local);" + "Initial Catalog=Northwind;" + "Integrated Security=SSPI";
// Tạo đối tượng Sqlcommand
SqlCommand cmd = cnn.CreateCommand();
Trang 4
//Xác định kiểu câu lệnh cần thực hiện
cmd.CommandType = CommandType.Text;
//Xác định câu lệnh cần đối tượng SqlCommand
cmd.CommandText = "SELECT COUNT(*) FROM Customers " +
"WHERE Country='" + txtCountry.Text + "'";
4.3.4 Đối tượng DataAdapter.
ADO.Net dùng DataAdapter như chiếc cầu nối trung gian giữa DataSet và DataSource (nguồn dữ liệu), nó lấy dữ liệu từ cơ sở dữ liệu sau đó dùng phương thức Fill() để đẩy dữ liệu cho đối tượng DataSet Nhờ đối tượng DataAdapter mà DataSet tồn tại độc lập, cách biệt với cơ sở dữ liệu và một DataSet có thể là thể hiện của một hay nhiều cơ sở dữ liệu.Ví dụ:
//Tạo đối tượng SqlDataAdapter
SqlDataAdapter da = new SqlDataAdapter();
//Cung cấp cho da một Sqlcommand và SqlConnection
//lấy dữ liệu
//Tạo đối tượng DataSet mới
DataSet ds= new DataSet();
//Đẩy dữ liệu da vào trong ds bằng hàm Fill()
da.Fill(ds, "Ten bang");
4.4.DataSet
Đối tượng DataSet là thành phần chính của kiến trúc không kết nối cơ sở dữ liệu, được dùng để nắm giữ dữ liệu của mọi cơ sở dữ liệu bên trong đối tượng này
để sau đó cập nhật trở lại cơ sở dữ liệu nguồn bằng phương thức Update của đối
Trang 5tượng SqlDataAdapter Trước khi sử dụng dữ liệu trong DataSet ta phải lấy dữ liệu
về DataSet Quá trình lấy về DataSet gồm 4 bước:
- Xây dựng đối tượng Sql Connnection để kết nối CSDL
- Xây dựng đối tượng SqlCommand để lấy dữ liệu cần thiết
- Gán đối tượng SqlCommand cho thuộc tính SeclectCommand của đối tượng SqlDataAdapter
- Gọi phương thức Fill của đối tượng SqlDataAdapter để lấy dữ liệu cần thiết
Hình 4.2 :Mô hình của DataSet
4.4.1.Đối tượng DataTable và DataColumn.
Ta có thể viết mã C# để tạo ra đối tượng DataTable hay nhận từ kết quả của câu truy vấn đến cơ sở dữ liệu DataTable có một số thuộc tính dùng chung(public) như thuộc tính Columns, từ thuộc tính này ta có thể truy vấn đến đối tượng DataColumnsCollection thông qua chỉ ,mục hay tên cột để nhận về các đối tượng DataColumn thích hợp, mỗi DataColumn tương ứng với một cột trong bảng dữ liệu Ví dụ:
DataTable dt= new DataTable("Ten bang");
Trang 6DataColumn dc = dt.Column("Ten cot");
4.4.2 Đối tượng DataRelation.
Ngoài đối tượng DataTable được truy cập thông qua thuộc tính Tables, DataSet con có thuộc tính Relations Thuộc tính này dùng để truy cập đến đối tượng DataRelationCollection thông qua chỉ mục hay tên của quan hệ ta sẽ trả về đối tượng DataRelation tương ứng Ví dụ:
//Tạo đối tượng DataSet mới
DataSet ds= new DataSet();
//Liên kết hai bảng thông qua khóa ngoại
DataRelation rel = ds.Relations.Add("ten cot",
ds.Tables["Ten bangA"].Columns["cot chung 2bang"],
ds.Tables["Ten bang B"].Columns["cot chung 2 bang"]);
4.4.3.Đối tượng DataView
DataView dùng để trình bày dữ liệu có trong đối tượng DataTable dưới hinhg thức sắp xếp, lọc tìm kiếm, hiệu chỉnh và điều hướng
Ví dụ:
DataSet ds= new DataSet();
//Tạo đối tượng DataView
DataView dv = new DataView(ds.Tables["Ten bang"]);
//Lọc theo tên thuộc tính của bảng
dv.RowFilter="Ten cot='Thuoc tinh can loc'"
4.4.4.Đối tượng DataGridview
Đối tượng DataGridView dùng để trình bày dữ liệu có trong đối tượng DataSet, DataTable, DataView dưới hình thức khác nhau
Ví dụ :
Trang 7//Khai báo gọi phương thức FillDataSet
DataSet da = FillDataSet("select * from Customers");
// Khai báo điền đối tượng DataSet vào thuộc tính //DataSource của đối tượng DataGridView
this.DataGridView1.DataSource=DataSet.Tables[0]