Kết nốiCSDL 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ếtnối vào cơ sở dữ liệu để lấy dữ liệu và kếtnố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ếtnố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ếtnố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 Hình 4.1 Dataset là thành phần chính cho đặc trưng kếtnố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ếtnố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 - 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ếtnố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ếtnố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(); //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 tượ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ếtnố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"); DataColumn 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ụ : //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] . 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;. 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ở