Trong kỹ thuật phần mềm, một ứng dụng web hay webapp là một trình ứng dụng mà có thể tiếp cận qua web thông qua mạng nhƣ Internet hay intranet. Ứng dụng web phổ biến nhờ vào sự có mặt vào bất cứ nơi đâu của một chƣơng trình. Khả năng cập nhật và bảo trì ứng dụng Web mà không phải phân phối và cài đặt phần mềm trên hàng ngàn máy tính là lý do chính cho sự phổ biến của nó. Ứng dụng web đƣợc dùng để hiện thực mail, bán hàng trực tuyến, đấu giá trực tuyến, wiki, diễn đàn thảo luận, Weblog, MMORPG, hệ quản trị nội dung, phần mềm quản lý nguồn nhân lực và nhiều chức năng khác.
Trang 1TRƯỜNG TRUNG CẤP KINH TẾ KỸ THUẬT NGUYỄN HỮU CẢNH
Trang 2LỜI NÓI ĐẦU
Nhằm đổi mới phương pháp giảng dạy, nâng cao chất lượng giáo dục chuyên nghiệp
và đào tạo theo nhu cầu xã hội Trường Trung cấp Kinh tế Kỹ thuật Nguyễn Hữu Cảnh biên soạn tài liệu giảng dạy trình độ Trung cấp chuyên nghiệp tất cả các môn học thuộc các ngành, chuyên ngành đào tạo tại trường, giúp cho học sinh có điều kiện học tập, nâng cao tính tự học và sáng tạo
Tài liệu giảng dạy môn Lập trình Web 2 thuộc học phần chuyên ngành của ngành đào tạo Tin học ứng dụng
Sau khi học xong môn học này, học sinh có khả năng :
- Rèn luyện tác phong làm việc, đức tính cẩn thận, chính xác, khoa học
Thời lượng và nội dung môn học:
Thời lượng : Lý thuyết 30 tiết; Thực hành 60 tiết
Nội dung môn học gồm các chương:
Bài 1 : Giới thiệu ADO.NET
Bài 2 : Tìm hiểu và ứng dụng cơ chế Data Binding
Bài 3 : Các đối tượng dữ liệu (Data Controls)
Trong quá trình biên soạn tài liệu này tác giả đã chọn lọc những kiến thức cơ bản, bổ ích nhất, có chất lượng nhằm đáp ứng tốt nhu cầu giảng dạy của giáo viên và học tập của học sinh bậc Trung cấp chuyên nghiệp tại trường
Tuy nhiên, quá trình thực hiện không thể tránh những thiếu sót, tác giả rất mong nhận được sự đóng góp của quý thầy cô đồng nghiệp và các em học sinh để hiệu chỉnh tài liệu giảng dạy ngày càng hiệu quả hơn
Trân trọng cảm ơn
Trang 3MỤC LỤC
LỜI NÓI ĐẦU
Trang 4BÀI 1 GIỚI THIỆU ADO.NET
Sau bài học này, học sinh có khả năng
1.1 KIẾN TRÚC ADO.NET
ADO.NET là tập các lớp cung cấp dịch vụ truy cập dữ liệu hỗ trợ cho lập trình viên trên nền tảng NET ADO.NET cung cấp các thành phần tham gia vào việc xây dựng ứng dụng chia sẻ dữ liệu và phân tán Đây là phần tích hợp sẵn của nền tảng NET giúp truy cập dữ liệu quan hệ, XML một cách dễ dàng
Trước đây, việc xử lý dữ liệu chủ yếu dựa vào việc kết nối trực tiếp đến cơ sở dữ liệu theo mô hình hai lớp Hiện nay, các ứng dụng xử lý dữ liệu đã sử dụng mô hình nhiều lớp, lập trình viên có thể tiếp cận kỹ thuật ngắt kết nối nhằm mang lại hiệu quả cho những ứng dụng lớn
1.1.1 Các thành phần của ADO.NET
Hai thành phần chính của ADO.NET phục vụ cho việc truy cập và xử lý dữ liệu là trình cung cấp dữ liệu dựa trên nền tảng NET và đối tượng DataSet
1.1.1.1 Trình cung cấp dữ liệu ADO.NET
Là các thành phần được thiết kế trực tiếp truy cập dữ liệu, chúng có tính năng xử lý nhanh, tuy nhiên chỉ cho phép chỉ đọc và duyệt các mẫu tin theo một chiều tới duy nhất Gồm các thành phần đối tượng sau :
- Đối tượng Connection cung cấp các phương thức kết nối đến nguồn dữ liệu.
- Đối tượng Command cho phép truy cập đến các câu lệnh SQL liên quan đến cơ
sở dữ liệu và nhận kết quả từ việc thực thi các câu lệnh SQL này
- Đối tượng DataReader dùng để duyệt các mẫu tin trả về từ đối tượng Command
- Đối tượng DataAdapter là cầu nối giữa đối tượng DataSet với nguồn dữ liệu 1.1.1.2 Đối tượng DataSet
Được thiết kế cho việc truy cập dữ liệu độc lập với bất kỳ nguồn dữ liệu nào DataSet chứa tập hợp các đối tượng bảng DataTable gồm nhiều dòng , nhiều cột dữ liệu và khóa chính, khóa ngoại hay ràng buộc toàn vẹn
1.1.1.3 Lựa chọn giữa DataReader với DataSet
Sử dụng DataSet khi
- Nhận dữ liệu từ nguồn dữ liệu và chuyển sang cục bộ cho ứng dụng xử lý
- Điều khiển dữ liệu giữa các lớp của mô hình ứng dụng
Trang 5- Tích hợp dữ liệu động vào các điều khiển của ASP.NET Server hoặc kết hợp dữ liệu từ nhiều nguồn khác nhau.
- Xử lý dữ liệu mà không cần phải mở kết nối đến cơ sở dữ liệu
Sử dụng DataReader khi
- Duyệt các mẫu tin nhanh chóng
- Tiết kiệm bộ nhớ phải lưu dữ liệu như DataSet để tăng tốc thực thi chương trình
1.1.2 LINQ to DataSet
Cung cấp khả năng truy vấn và kiểm tra biên dịch theo thời gian trên dữ liệu lưu trữ trong DataSet Cho phép viết các câu truy vấn bằng các ngôn ngữ lập trình như C# hay Visual Basic trên nền tảng NET
sở dữ liệu trả kết quả, LINQ to SQL sẽ chuyển kết quả này trở thành các đối tượng
1.1.4 ADO.NET Entity Framework
Cho phép lập trình viên tạo ứng dụng truy cập dữ liệu bằng cách lập trình theo mô hình khái niệm thay vì trực tiếp sử dụng mô hình quan hệ của cơ sở dữ liệu Mục đích làm giảm khối lượng mã lệnh và bảo trì các yêu cầu cho các ứng dụng xử lý dữ liệu
1.1.5 Dịch vụ dữ liệu WCF
Dùng để triển khai dịch vụ dữ liệu trên Web hay mạng cục bộ Dữ liệu có cấu trúc như một thực thể và có mối quan hệ như đặc tả của mô hình dữ liệu thực thể
Hình 1.1 Kiến trúc ADO.NET
1.2 TRÌNH CUNG CẤP DỮ LIỆU CỦA ADO.NET
Được dùng để kết nối đến cơ sở dữ liệu, thực thi câu lệnh và lấy kết quả Những kết quả này được xử lý trực tiếp cũng như gián tiếp khi cần bằng cách đặt toàn bộ kết quả vào đối tượng DataSet Trình cung cấp dữ liệu tạo cầu nối giữa nguồn dữ liệu và mã lệnh, tăng tính thi hành mà không phải sử dụng nhiều mã lệnh
Bảng 1.1 Danh sách các trình cung cấp dữ liệu trong NET
Trang 6Tên Trình Cung Cấp Dữ liệu Mô Tả
Trình cung cấp dữ liệu cho SQL Server Dùng để truy cập đến cơ sở dữ liệu MS SQL
Server từ phiên bản 7.0 trở về sau Sử dụng namespace ystem.Data.SqlClient
Trình cung cấp dữ liệu cho OLEDB Dùng truy cập các nguồn dữ liệu thông qua đối
tượng OLEDB Sử dụng namespace System.Data.OleDb
Trình cung cấp dữ liệu cho ODBC Dùng truy cập các nguồn dữ liệu thông qua đối
tượng ODBC Sử dụng namespace System.Data.Odbc
Trình cung cấp dữ liệu cho Oracle Dùng truy cập nguồn dữ liệu Oracle Hỗ trợ
Oracle từ phiên bản 8.1.7 trở về sau Sử dụng namespace System.Data.OracleClient
Trình cung cấp dữ liệu cho EntityClient Dùng truy cập dữ liệu theo mô hình dữ liệu thực
System.Data.EntityClient
Bảng 1.2 Danh sách các đối tượng quan trọng của trình cung cấp dữ liệu
Connection Thiết lập kết nối đến nguồn dữ liệu bất kỳ
Command Thực thi câu lệnh truy cập trên nguồn dữ liệu
DataReader Đọc từng mẫu tin tuần tự từ đầu cho đến cuối
danhs sách Không đi ngược lại
DataAdapter Đổ nguồn dữ liệu vào DataSet và thực hiện cập
nhật từ DataSet trở lại nguồn dữ liệu
1.3 CÁC NAMESPACE CỦA ADO.NET
Phần này chúng ta sẽ tìm hiểu các namespace của ADO.NET
1.3.1 Namespace cho SQL Server (SQLClient)
Sử dụng giao thức dành riêng cho việc kết nối đền SQL Server Namespace này sẽ giúp tối ưu hóa việc truy cập trực tiếp đến SQL Server mà không cần phải có thêm các tầng dịch vụ khác như OLEDB hay ODBC
Trang 7Hình 1.2 So sánh ưu điểm kết nối nguồn dữ liệu giữa SQLClient với OLEDB
Tuy nhiên để sử dụng được namespace cho SQL Server, ta phải cài đặt phiên bản từ 7.0 (2005) trở về sau Các lớp của trình cung cấp dữ liệu cho SQL Server được đặt trong
namespace System.Data.SqlClient Với những phiên bản trước, ta phải sử dụng trình
cung cấp dữ liệu cho OLEDB, các lớp trong trình này được đặt trong namespace
System.Data.OleDb.
Đoạn mã gọi namspace cho SQL Server sử dụng trong chương trình
1.3.2 Namespace cho OLEDB
Sử dụng công nghệ COM để truy cập dữ liệu và có thể kết nối đến nhiều nguồn dữ liệu khác nhau như (Oracle, SQL Server, MS Access…)
Bảng 1.3 Danh sách các driver hỗ trợ truy cập các nguồn dữ liệu
Microsoft.Jet.OLEDB.4.0 OLE DB cho Jet (MS Access)
Các lớp của trình cung cấp dữ liệu cho OLE DB được đặt trong namespace
System.Data.OleDb
Đoạn mã gọi namspace cho OLEDB sử dụng trong chương trình
1.3.3 Namespace cho Oracle (OracleClient)
Cho phép truy cập nguồn dữ liệu Oracle thông qua phần mềm kết nối Oracle Client Trình cung cấp dữ liệu này hỗ trợ Oracle từ phiên bản 8.1.7 trở về sau Các lớp của trình
cung cấp dữ liệu cho Oracle được đặt trong namespace System.Data.OracleClient.
Đoạn mã gọi namspace cho Oracle sử dụng trong chương trình
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Data;
Trang 81.3.4 Namespace cho ODBC
Sử dụng trình quản lý điều khiển ODBC để truy cập dữ liệu ODBC này thường có sẵn trong hệ điều hành MS Windows Các lớp của trình cung cấp dữ liệu cho ODBC được đặt
trong namespace System.Data.Odbc
Đoạn mã gọi namspace cho ODBC sử dụng trong chương trình
1.4 TÌM HIỂU CƠ CHẾ KẾT NỐI CỦA ADO.NET QUA CONNECTED LAYER
Chức năng chính của bất kỳ ứng dụng cơ sở dữ liệu là việc kết nối nguồn dữ liệu và rút trích dữ liệu chứa trong nguồn đó
1.4.1 Chuỗi kết nối cơ sở dữ liệu
Là chuỗi chứa đựng thông tin ban đầu làm tham số cho trình cung cấp dữ liệu kết nối đến nguồn dữ liệu Mỗi trình cung cấp dữ liệu sẽ có chuỗi kết nối riêng
1.4.1.1 Chuỗi kết nối SQL Server
Có dạng sau :
Data Source=<Tên SQL Server>; Initial Catalog=<Tên cơ sở dữ liệu>; Integrated Security=True
Ví dụ :
Data Source=(local); Initial Catalog=TruongHoc; Integrated Security=True
1.4.1.2 Chuỗi kết nối OleDb
Có dạng sau :
Provider= Microsoft.Jet.OLEDB.4.0; Data Source=<đường dẫn đến cơ sở dữ liệu>; User ID=<username>; Password=<mật khẩu>
Ví dụ:
Kết nối đến cơ sở dữ liệu MS Access
Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\Northwind.mdb; User ID=Admin; Password=;
Kết nối đến cơ sở dữ liệu MS SQL Server
Provider=sqloledb; Data Source=MySqlServer; Initial Catalog=pubs; User Id=*****; Password=*****;
1.4.1.3 Chuỗi kết nối Oracle
Có dạng sau :
Data Source = <phiên bản Oracle>; User ID=<Tên username>; Password=<Mật khẩu>
Ví dụ:
using System.Data.Odbc;
Trang 9Data Source=Oracle9i; User ID=*****; Password=*****;
1.4.2 Kết nối đến cơ sở dữ liệu
Sau khi đã thiết lập thông tin ban đầu trong chuỗi kết nối, tiếp theo chúng ta sử dụng đối tượng Connection để thực thi việc kết nối vào cơ sở dữ liệu
1.4.2.1 Kết nối cơ sở dữ liệu SQL Server
Sử dụng đoạn mã sau để thực hiện
1.4.2.2 Kết nối cơ sở dữ liệu OLEDB
Sử dụng đoạn mã sau để thực hiện
1.4.2.3 Kết nối cơ sở dữ liệu Oracle
Sử dụng đoạn mã sau để thực hiện
1.4.3 Đối tượng Command và Parameter
1.4.3.1 Đối tượng Command
Mỗi trình cung cấp dữ liệu có đối tượng Command riêng phục vụ việc thực thi và trả kết quả từ nguồn dữ liệu Trình cung cấp dữ liệu SQL Server dùng đối tượng SqlCommand, trình cung cấp dữ liệu OleDb dùng đối tượng OleDbCommand, trình cung cấp dữ liệu Oracle dùng đối tượng OracleCommand và trình cung cấp dữ liệu Odbc dùng đối tượng OdbcCommand
Mỗi đối tượng Command kể trên sử dụng phương thức thực thi và trả về kết quả theo ý muốn
Bảng 1.4 Danh sách phương thức thực thi của đối tượng Command
string connectionString = “Data Source=(local); Initial Catalog=TruongHoc; Integrated Security=True”;
SqlConnection connection = new SqlConnection(connectionString);
Trang 10Tên Command Giá Trị Trả Về
ExecuteReader Trả về đối tượng DataReader
ExecuteScalar Trả về một giá trị tính toán
ExecuteNonQuery Thực thi một lệnh nhưng không trả về kết quả
ExecuteXMLReader Trả về đối tượng XMLReader Chỉ có trong
đối tượng SqlCommand
Đoạn mã mẫu sử dụng đối tượng SqlCommand để thực thi truy cập bảng MONHOC trong cơ sở dữ liệu TRUONGHOC
string connectionString = “Data Source=(local); Initial Catalog=TruongHoc; Integrated Security=True”;
SqlConnection connection = new SqlConnection(connectionString);
Trang 11Đối tượng Command sử dụng Parameter để truyền giá trị đến câu lệnh SQL hay thủ tục lưu trữ và các giá trị này sẽ được kiểm tra kiểu trước khi được truyền Câu lệnh SQL có tham số giúp cải thiện tốc độ thực thi do cơ sở dữ liệu sẽ tìm chính xác thông tin dữ liệu
mà người dùng cần
Khi thêm tham số, ta phải cung cấp thuộc tính ParameterDirection để điều hướng giá trị trả về của tham số đó
Bảng 1.5 Danh sách các giá trị của tham số ParameterDirection
Input Mặc định Tham số truyền giá trị đến câu lệnh SQLInputOutput Tham số truyền giá trị đến câu lệnh SQL và nhận kết
Bảng 1.6 Cú pháp khai báo tham số của các trình cung cấp dữ liệu
Trình cung cấp dữ liệu Cú pháp đặt tên tham số
OleDb Type
Odbc Type
Oracle Type
Trang 12DateTimeOffset chỉ có từ SQL Server 2008 trở
về sau
Không hỗ trợ Không hỗ trợ DateTime
TimeSpan
Time chỉ có từ SQL Server 2008 trở về sau
Date chỉ có từ SQL Server 2008 trở về sau
Time chỉ có từ SQL Server 2008 trở về sau
Đoạn mã sau sẽ thực hiện truy vấn tìm môn học Tin học A có mã môn học là THA
đã tồn tại trong cơ sở dữ liệu hay chưa?
SqlConnection connection = new SqlConnection(connectionString))
Trang 13// Tạo đối tượng Command thực thi SQL.
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "SELECT * FROM MONHOC WHERE MAMH =
@MAMH";
command.CommandType = CommandType.Text;
// Thêm tham số Input
SqlParameter parameter = new SqlParameter();
SqlDataReader reader = command.ExecuteReader();
Đoạn mã viết bằng OLEDB
OleDbCommand command = new OleDbCommand("SELECT * FROM MONHOC WHERE MAMH = ? ", connection);
1.5.1 Đối tượng DataAdapter
Dùng để truy cập và đổ dữ liệu lưu thành bảng trong đối tượng DataSet DataSet sẽ xử lý
dữ liệu các bảng mà nó lưu nhưng không ảnh hưởng đến cơ sở dữ liệu vật lý, sau đó nếu muốn thay đổi thực sự tại cơ sở dữ liệu vật lý, đối tượng DataAdapter sẽ nhận nguồn dữ liệu từ DataSet và cập nhật vào cơ sở dữ liệu
Trang 14Mỗi trình cung cấp dữ liệu có DataAdapter khác nhau như SqlDataAdapter dành cho SQL Server, OleDbDataAdapter dành cho OLEDB, OdbcDataAdapter dành cho ODBC hay OracleDataAdapter của Oracle.
DataAdapter là một bộ gồm bốn đối tượng Command:
• SelectCommand : cho phép lấy thông tin từ nguồn dữ liệu về
• InsertCommand : cho phép chèn thêm dữ liệu (dòng) vào bảng trong nguồn dữ
liệu
• UpdateCommand : cho phép sửa đổi dữ liệu trên bảng trong nguồn dữ liệu.
• DeleteCommand : cho phép xóa dòng dữ liệu trên bảng trong nguồn dữ liệu.
Chúng ta cần phải chỉ rõ nội dung lệnh truy vấn cho SelectCommand, nội dung các đối tượng còn lại có thể sử dụng đối tượng thích hợp để tự động phát sinh hoặc chỉ rõ lệnh cho từng đối tượng
1.5.1.1 Tạo đối tượng DataAdapter
Cũng như đối tượng Command, chúng ta cần khai báo rõ DataAdapter sử dụng theo trình cung cấp dữ liệu nào
Ví dụ tạo đối tượng DataAdapter cho loại nguồn dữ liệu SQL Server như sau :
mở kết nối khi cần thiết và tự động đóng lại
1.5.1.2 Các chức năng của DataAdpater
a Lấy dữ liệu từ nguồn
Sau khi có đối tượng DataAdpater với nội dung SelectCommand và thông tin về kết nối, chúng ta có thể sử dụng DataAdapter để lấy dữ liệu về cho các đối tượng chứa dữ liệu như DataSet, DataTable qua phương thức Fill
- Đổ dữ liệu vào DataSet có sẵn Dữ liệu được lấy về DataSet dưới dạng các DataTable, với tên mặc định là Table, Table1, Table2, …
Fill(<dataset>)
Trang 15- Đổ dữ liệu vào DataTable có sẵn
Fill(<datatable>)
- Đổ dữ liệu vào DataSet cho bảng <tên DataTable>; nếu chưa có, bảng sẽ được tạo Phương thức trả về số mẫu tin lấy về được
Fill(<dataset>, <tên DataTable>)
b Lấy cấu trúc dữ liệu từ nguồn
- Đổ cấu trúc dữ liệu vào DataSet có sẵn, phương thức trả về một tập hợp các bảng được thêm vào DataSet
FillSchema(<dataset>, <kiểu cấu trúc>)
- Đổ cấu trúc dữ liệu vào DataSet cho bảng <tên DataTable>; nếu chưa có, bảng sẽ được tạo ra
FillSchema(<dataset>, <kiểu cấu trúc>, <tên DataTable>)
<kiểu cấu trúc> quy định việc ánh xạ tên có được chấp nhận hay không
Bảng 1.8 Các giá trị của <kiểu cấu trúc>
SchemaType.Mapped Sử dụng các TableMappings cho các cấu
trúc đưa vào DataSet nếu trùng hợpSchemaType.Source Không sử dụng các TableMappings
c Tạo bộ lệnh cập nhật cho DataAdapter
Dựa vào nội dung lệnh truy xuất của DataAdapter, chúng ta có thể sử dụng một đối tượng
để tự động tạo các lệnh còn lại, đó là CommandBuilder
<DataSet> : Đối tượng DataSet mà DataAdapter sẽ cập nhật
- Cập nhật các thay đổi trên bảng có DataTable vào nguồn dữ liệu
Trang 16<DataTable> : Đối tượng DataTable mà DataAdapter sẽ cập nhật
- Cập nhật các thay đổi trên bảng có tên <tên bảng> trong DataSet vào nguồn dữ liệu
Update(<DataSet>, <tên bảng>)
1.5.2 Đối tượng DataSet
Là bộ nhớ lưu trữ dữ liệu để xử lý theo mô hình lập trình quan hệ độc lập với nguồn dữ liệu DataSet biểu diễn đầy đủ dữ liệu của bảng, quan hệ giữa các bảng, ràng buộc toàn vẹn
Bảng 1.8 Các thuộc tính của DataSet
Relations Tập hợp các quan hệ (DataRelation) một nhiều
theo mô hình cơ sở dữ liệu quan hệ của DataSetTables Tập hợp các bảng (DataTable) của DataSet (chỉ
đọc)Các phương thức của DataSet
a Thêm 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
- Thêm một bảng mới với tên là <tên bảng>, đưa vào tập hợp Tables
Tables.Add(<tên bảng>)
- Đưa <bảng> vào tập hợp Tables
Tables.Add(<bảng>)
<bảng> là một đối tượng DataTable được đưa vào DataSet
Lưu ý: Tên bảng trong DataSet có phân biệt chữ hoa chữ thường Hai bảng tên “hocsinh”
và “Hocsinh” là hai bảng khác nhau
Ví dụ :
DataSet CSDL = new DataSet(“QLHocSinh”);
DataTable tblMonHoc = new DataTable(“MonHoc”);
CSDL.Tables.Add(tblMonHoc);
b Xóa bảng ra khỏi tập hợp Tables của DataSet
Các phương thức sau dùng để xóa bảng ra khỏi tập hợp Tables
- Xóa <bảng> khỏi tập hợp Tables
Trang 17c Kiểm tra bảng có thuộc về DataSet
- Trả về True nếu trong Tables có bảng tên <tên_bảng>, ngược lại trả về False
1.5.3 Đối tượng DataTable
Dữ liệu các bảng trong nguồn dữ liệu được lấy về và đưa vào các DataTable DataTable thuộc tên miền:
Using System.Data.DataTable;
Ví dụ cách tạo một DataTable
DataTable bang = new DataTable(<tên bảng>);
DataTable hình thành từ các DataColumn, DataRow
Bảng 1.9 Các thuộc tính của DataTable
ChildRelations Trả về tập hợp những quan hệ trong đó bảng
đóng vai trò bảng cha
Constrains Trả về tập hợp các ràng buộc trong bảng
DefaultView Trả về DataView phát sinh từ bảng
Trang 18ParentRelations Trả về tập hợp những quan hệ trong đó bảng
đóng vai trò bảng con
PrimaryKey Mảng các cột có chức năng làm khóa chính của
bảng
- Thêm dòng mới vào bảng
Thêm một dòng có sẵn vào bảng Dòng này được tạo ra từ phương thức NewRow của đối tượng DataTable
DataTable bang = new DataTable();
DataRow dongMoi = bang.NewRow();
Trang 19Columns là tập hợp chứa các cột trong cấu trúc của bảng Mọi tham chiếu đến cột đều thông qua tập hợp này
- Lấy số cột trong tập hợp: cho biết số cột có trong tập hợp
1.6 ĐỐI TƯỢNG DỮ LIỆU SQLDATASOURCE
Đối tượng SqlDataSource lấy dữ liệu từ cơ sở dữ liệu SQL và đổ vào các điều khiển có
hỗ trợ hiển thị dữ liệu (TextBox, GridView …) Ngoài ra, SqlDataSource còn cho phép cập nhật hay sắp xếp dữ liệu trên Web mà không phải viết mã lệnh quá nhiều
a Khai báo đối tượng SqlDataSource
<asp:SqlDataSource id=”SqlDataSource1” runat=”server”/>
b Truy cập dữ liệu
Để truy cập dữ liệu từ cơ sở dữ liệu sử dụng SqlDataSource, ta cần thực hiện thiết lập giá trị cho các thuộc tính quan trọng sau :
- ProviderName : Tên trình cung cấp dữ liệu ADO.NET mà ta đang làm việc (SQL
Server, OLEDB, ODBC, Oracle) Ở đây, ta sử dụng Microsoft SQL Server nên ProviderName là “System.Data.SqlClient”
- ConnectionString : Chuỗi kết nối đến cơ sở dữ liệu cần làm việc.
- SelectCommand : Thiết lập câu truy vấn SQL dạng SELECT
Lưu ý : Việc thiết lập chuỗi kết nối cụ thể cho thuộc tính ConnectionString không được khuyến khích sử dụng đối với những dự án Web lớn Để ứng dụng Web dễ bảo trì và bảo mật, chuỗi kết nối sẽ được lưu vào thẻ <connectionString> trong tập tin Web.config Sau
đó, trong đối tượng SqlDataSource, ta sử dụng đối tượng ConnectionString để gọi chuỗi kết nối từ Web.config
Trang 20c Hiển thị dữ liệu đến các điều khiển
Như đã biết, điều khiển SqlDataSource chỉ làm nhiệm vụ thực hiện các truy vấn và nhận kết quả trả về từ nguồn dữ liệu Việc hiển thị dành cho các điều khiển khác Đoạn mã sau minh họa cách đổ dữ liệu từ SqlDataSource đến điều khiển ListBox
d Sử dụng tham số với SqlDataSource
Tên tham số trong các câu lệnh SelectCommand, InsertCommand, UpdateCommand, DeleteCommand trong SqlDataSource nếu dùng nguồn dữ liệu SQL Server luôn bắt đầu bằng dấu “@”, trong khi đó nguồn OLEDB và ODBC dùng dấu “?”
Trang 21UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName WHERE EmployeeID=@EmployeeID"
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="FirstName" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name=”EmpID” Type=”Int32” />
<asp:Parameter Name=”LastName” Type=”String” />
<asp:Parameter Name=”FirstName” Type=”String” />
</UpdateParameters>
</asp:sqlDataSource>
CÂU HỎI ÔN TẬP BÀI 1
1 Trình bày chi tiết các thành phần của ADO.NET
2 Trình bày chức năng của các trình cung cấp dữ liệu trong ADO.NET
3 Trình bày cách gọi namespace của các trình cung cấp dữ liệu trong ADO.NET
4 Trình bày sự ưu điểm kết nối dữ liệu giữa SQL Server với OLEDB
5 Trình bày chức năng của đối tượng kết nối dữ liệu (Connection)
Trang 226 Trình bày chức năng của đối tượng Command.
7 Trình bày chức năng của đối tượng DataAdapter
8 Trình bày chức năng của đối tượng DataSet
9 Trình bày chức năng của đối tượng DataTable
Trang 23THỰC HÀNH BÀI 1
Bài 1 : Bài thực hành này hướng dẫn học sinh cách viết mã lệnh tạo đối tượng kết
nối đến cơ sở dữ liệu MS SQL Server
Bước 1 Mở chương trình Visual Studio, chọn File New Project
Hình 1.3 Tạo dự án ASP.NET Web Application Bước 2 : Mở file Web.config , tìm thẻ <appSetting/> và chèn cặp thẻ sau :
Bảng 1.10 Các control tham gia thiết kế
Trang 24Bước 4 : Mở file Default.aspx.cs, nhập mã lệnh vào phương thức Page_Load
//Bước 2 : Tạo đối tượng kết nối
SqlConnection con = new SqlConnection(conStr);
Trang 25Bước 5 : Nhấn Ctrl + F5 chạy chương trình
Bài 2 : Bài thực hành này hướng dẫn học sinh cách viết mã lệnh lấy dữ liệu và xuất kết quả ra trang Web sử dụng các đối tượng sau :
- SqlConnection
- SqlCommand
- SqlDataReader
Bước 1 : Mở chương trình Visual Studio, chọn File New Project
Hình 1.4 Tạo dự án ASP.NET Web Application Bước 2 : Mở file Web.config , tìm thẻ <appSetting/> và chèn cặp thẻ sau ngay bên
Trang 26Bước 3 : Mở file Default.aspx dạng Design, kéo Control sau đây vào vùng thiết kế
Bảng 1.11 Control tham gia thiết kế
StringBuilder htmlStr = new StringBuilder();
//Bước 1 : lấy chuỗi kết nối CSDL TruongHoc
string conStr =
WebConfigurationManager.ConnectionStrings["TruongHoc"].ConnectionString;
//Bước 2 : Tạo đối tượng kết nối
SqlConnection con = new SqlConnection(conStr);
Trang 27cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM T_MONHOC";
SqlDataReader reader = cmd.ExecuteReader();
htmlStr.Append("<ul>");
while (reader.Read()) {
htmlStr.Append("<li>");
htmlStr.Append("Ma mon hoc :" + reader["mamh"] + "<br/>");
htmlStr.Append("Ten mon hoc :" + reader["tenmh"] + "<br/>");
htmlStr.Append("So tiet: " + reader["sotiet"] + "<br/>");
htmlStr.Append("Hoc phi : " + reader["hocphi"] + "<br/>");
Trang 28Bước 1 : Mở chương trình Visual Studio, chọn File New Project
Hình 1.5 Tạo dự án ASP.NET Web Application Bước 2 : Mở file Web.config , tìm thẻ <appSetting/> và chèn cặp thẻ sau :
<connectionStrings>
<add name="TruongHoc" connectionString="Data Source=localhost\SQLEXPRESS; Initial Catalog=TruongHoc; Integrated Security=true"/>
</connectionStrings>
Bước 3 : Mở file Default.aspx dạng Design, kéo Control sau đây vào vùng thiết kế
Bảng 1.12 Các điều khiển tham gia thiết kế
Trang 29TextBox txtSotiet
Hình 1.6 Thiết kế mẫu thêm môn học mới Bước 4 : Mở file Default.aspx.cs, nhập mã lệnh vào phương thức Page_Load
Trang 30WebConfigurationManager.ConnectionStrings["TruongHoc"].ConnectionString; protected void Page_Load(object sender, EventArgs e)
Bước 5 : Viết mã lệnh cho hàm Du_Lieu_Nguon
protected void Du_Lieu_Nguon() {
StringBuilder htmlStr = new StringBuilder();
//Bước 1 : lấy chuỗi kết nối CSDL TruongHoc
string conStr = WebConfigurationManager.ConnectionStrings["TruongHoc"].ConnectionString;
//Bước 2 : Tạo đối tượng kết nối
SqlConnection con = new SqlConnection(conStr);
cmd.CommandText = "SELECT * FROM T_MONHOC";
SqlDataReader reader = cmd.ExecuteReader();
htmlStr.Append("<table border=1>");
htmlStr.Append("<tr>");
htmlStr.Append("<th>Ma mon hoc</th>");
htmlStr.Append("<th>Ten mon hoc</th>");
Trang 31Bước 6 : Viết mã lệnh cho sự kiện Click trên nút Thêm
protected void btnThem_Click(object sender, EventArgs e)
Trang 32Bước 7 : Viết mã lệnh cho hàm thêmMonHoc
protected void themMonHoc() {
Bước 8 : Nhấn Ctrl + F5 chạy chương trình
Bài 4 : Bài thực hành này hướng dẫn học sinh cách viết mã lệnh thực hiện tính toán trên các mẫu tin sử dụng các đối tượng sau:
- SqlConnection
- SqlCommand
- Hàm ExecuteScalar
Trang 33Bước 1 : Mở chương trình Visual Studio, chọn File New Project
Hình 1.7 Tạo dự án ASP.NET Web Application
Bước 2 : Mở file Web.config , tìm thẻ <appSetting/> và chèn cặp thẻ sau ngay phía dưới: <connectionStrings>
<add name="TruongHoc" connectionString="Data Source=localhost\SQLEXPRESS; Initial Catalog=TruongHoc Integrated Security=true”/>
</connectionStrings>
Bước 3 : Mở file Default.aspx dạng Design, kéo Control sau đây vào vùng thiết kế
Bảng 1.13 Control tham gia thiết kế
Trang 34//Bước 2 : Tạo đối tượng kết nối
SqlConnection con = new SqlConnection(conStr);
Trang 35}
}
}
}
Bước 5 : Nhấn Ctrl + F5 chạy chương trình
Bài 5 : Bài thực hành sẽ hướng dẫn học sinh cách viết mã lệnh tạo đối tượng DataSet lấy dữ liệu nguồn và ngắt kết nối Sử dụng các đối tượng sau:
- SqlConnection
- SqlDataAdapter
- DataSet
Bước 1 : Mở chương trình Visual Studio, chọn File New Project
Hình 1.8 Tạo dự án ASP.NET Web Application Bước 2 : Mở file Web.config , tìm thẻ <appSetting/> và chèn cặp thẻ sau ngay phía
Trang 36Bước 3 : Mở file Default.aspx dạng Design, kéo Control sau đây vào vùng thiết kế
Bảng 1.14 Control tham gia thiết kế
Bước 5 : Viết mã lệnh cho hàm Du_Lieu_Nguon
protected void Du_Lieu_Nguon() {
StringBuilder htmlStr = new StringBuilder();
Trang 37//Bước 1 : lấy chuỗi kết nối CSDL TruongHoc
string conStr =
WebConfigurationManager.ConnectionStrings["TruongHoc"].ConnectionString; //Bước 2 : Tạo đối tượng kết nối
SqlConnection con = new SqlConnection(conStr);
try
{
con.Open();
string sql = "SELECT * FROM T_GIAOVIEN";
SqlDataAdapter da = new SqlDataAdapter(sql, con);
htmlStr.Append("<th>Ma giao vien</th>");
htmlStr.Append("<th>Ho giao vien</th>");
htmlStr.Append("<th>Ten giao vien</th>");
Trang 38Bước 1 : Mở chương trình Visual Studio, chọn File New Project
Hình 1.9 Tạo dự án ASP.NET Web Application
Trang 39Bước 2 : Mở file Web.config , tìm thẻ <appSetting/> và chèn cặp thẻ sau ngay phía
Bước 3 Mở file Default.aspx dạng Design, kéo Control sau đây vào vùng thiết kế
Bảng 1.15 Control tham gia thiết kế
DataSet ds = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{
Trang 40//Tạo câu truy vấn
string sqlMonHoc = "SELECT * FROM T_MONHOC";
string sqlGiaoVien = "SELECT * FROM T_GIAOVIEN";
string sqlLop = "SELECT * FROM T_LOP";
//Điền dữ liệu vào DataSet
SqlDataAdapter da = new SqlDataAdapter(sqlMonHoc,con);
//Tạo quan hệ giữa bảng T_GiaoVien với bảng T_Lop trong DataSet
DataRelation rlGiaoVien_Lop = new DataRelation("T_GIAOVIEN_T_LOP",
ds.Tables["T_GIAOVIEN"].Columns["MAGV"], ds.Tables["T_LOP"].Columns["MAGV"]);
//Tạo quan hệ giữa bảng T_MONHOC với bảng T_LOP trong DataSet
DataRelation rlMonhoc_Lop = new DataRelation("T_MONHOC_T_LOP",
ds.Tables["T_MONHOC"].Columns["MAMH"], ds.Tables["T_LOP"].Columns["MAMH"]);
//Thêm các quan hệ vừa tạo vào DataSet
ds.Relations.Add(rlGiaoVien_Lop);
ds.Relations.Add(rlMonhoc_Lop);