LẬP TRÌNH WEB ASP.NET VỚI C#
Giảng Viên: Th.S Phạm Đào Minh Vũ Email: phamdaominhvu@yahoo.com
1
Chương 7 Lập Trình Web Form Với ADO.Net
7.1 Tổng quan về ADO.Net
7.2 Các đối tượng trong ADO.Net
7.3 Xây dựng lớp xử lý dữ liệu
263
Khoa CNTT, Trường CĐ CNTT TP.HCM
7.4 Xử lý giỏ hàng cho website thương mại điện tử
7.1. Tổng Quan Về ADO.Net
7.1.1 Giới thiệu
7.1.2 Kiến trúc ADO .Net
264 264
Khoa CNTT, Trường CĐ CNTT TP.HCM
7.1.3 Minh họa tạo kết nối CSDL
7.1.1 Giới Thiệu
Hầu hết ứng dụng windows hay website đều cần
có CSDL, để lưu trữ, xử lý, tìm kiếm và báo cáo… Khi dữ liệu trở thành trung tâm của ứng dụng thì việc cung cấp các chức năng tới người dùng phụ thuộc vào khả năng thao tác dữ liệu, vấn đề cần quan tâm là:
265 265
Khoa CNTT, Trường CĐ CNTT TP.HCM
Lưu dữ liệu tập trung. Đảm bảo toàn vẹn dữ liệu. Đảm bảo khả năng truy xuất đồng thời. Đảm bảo thời gian hồi đáp ngắn. Bảo mật dữ liệu. Trao đổi dữ liệu giữa các hệ thống khác nhau
Vấn đề này được giải quyết dựa vào khả năng
của các Hệ QTCSDL.
.Net truy xuất DL qua ADO.NET, đặc điểm chính
của ADO.NET là:
Khả năng làm việc với DL không kết nối: DL được lưu trữ trong bộ nhớ như một CSDL thu nhỏ (dataset), nhằm tăng tốc độ xử lý tính toán và hạn chế sử dụng tài nguyên.
266 266
Khoa CNTT, Trường CĐ CNTT TP.HCM
Khả năng xử lý dữ liệu chuẩn XML (Có thể trao đổi giữa bất kỳ hệ thống nào)
7.1.2 Kiến Trúc ADO.Net
MANAGED PROVIDER
CONTENT COMPONENT
267 267
Khoa CNTT, Trường CĐ CNTT TP.HCM
Kiến trúc ADO.NET có thể chia làm 2 phần chính:
Managed Provider Component: Bao gồm các đối tượng như DataAdapter, DataReader,… giữ nhiệm vụ làm việc trực tiếp với dữ liệu như database, file,…
268 268
Khoa CNTT, Trường CĐ CNTT TP.HCM
Content Component: Bao gồm các đối tượng như DataSet, DataTable,… đại diện cho dữ liệu thực sự cần làm việc.
DataSet: Là một bản sao thu nhỏ của CSDL trong bộ nhớ với nhiều bảng và các mối quan hệ.
DataReader: Là đối tượng giúp truy cập dữ liệu nhanh chóng.
269 269
Khoa CNTT, Trường CĐ CNTT TP.HCM
DataAdapter: Là đối tượng kết nối giữa DataSet và CSDL, nó bao gồm 2 đối tượng Connection và Command để cung cấp dữ liệu cho DataSet cũng như cập nhật dữ liệu từ DataSet xuống CSDL.
7.1.3 Minh họa tạo kết nối CSDL
Cơ bản các bước thực hiện với database
Bước 2: Mở kết nối dữ liệu
Bước 1: Tạo kết nối
Bước 3: Tạo lệnh điều khiển truy vấn SQL
Bước 5: Đóng kết nối
Bước 4: Thực thi lệnh
270 270
Khoa CNTT, Trường CĐ CNTT TP.HCM
Bước 6: in kết quả
using System; using System.Data; using System.Data.SqlClient; public partial class vd1 : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { //Khai báo và khởi tạo biến Connection SqlConnection cnn = new SqlConnection("Data Source=(local); Initial Catalog=QLbansach;User ID=sa;Password="); cnn.Open(); //Mở kết nối //Command điều khiển truy vấn sql SqlCommand cmd = cnn.CreateCommand(); cmd.CommandText="select TenKH from Khachhang where MaKH=5"; //lấy về chuỗi giá trị trong cơ sở dữ liệu string result = (string)cmd.ExecuteScalar(); cnn.Close(); //đóng kết nối Response.Write(result); //in giá trị ra màn hình } }
271 271
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ:
7.2. Các đối tượng trong ADO.Net
272 272
Khoa CNTT, Trường CĐ CNTT TP.HCM
7.2.1 Connection 7.2.2 Command
7.2.1 Connection
Vai trò của Connection trong ADO.net là tạo kết
nối giữa ứng dụng với CSDL Data Provider
273 273
Khoa CNTT, Trường CĐ CNTT TP.HCM
System.Data.Oledb : Sử dụng với Access System.Data.SqlCient : Sử dụng với SQLServer Ứng với mỗi tên miền: System.Data.Oledb.OledbConnection System.Data.SqlClient.SqlConnection Và các Data Provider khác: System.data.OcracleClient(Ocracle) MicroSoft.data.Odbc(Thông qua ODBC của HĐH) Microsoft.Data.Sqlxml (XML trên Sqlserver)
Connection String: Khi thực hiện kết nối cần khai báo các thông tin cho Connection thông qua thuộc tính Connection String. Tùy thuộc vào Data Provider:
Nếu kết nối với CSDL Access
274 274
Khoa CNTT, Trường CĐ CNTT TP.HCM
Provider: Khai báo Data Provider của Access Data Source: Tên tập tin CSDL (.mdb) User ID: Tên người dùng Password : Mật khẩu
275 275
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ: Tạo kết nối với CSDL Access using System; using System.Data; using System.Data.OleDb; public partial class VD2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { String StrCnn="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("~/App_Data/QLBansach.mdb"); OleDbConnection cnn = new OleDbConnection (StrCnn); cnn.Open(); //Truy xuất, xử lý dữ liệu cnn.Close(); } }
Nếu kết nối với CSDL SQLServer
Initial Catalog/DataBase: Tên CSDL
Data Source/Server: Tên Server
User ID/UID: Tên người dùng
Password/ PWD: Mật khẩu
Integrated Security: Cơ chế chứng thực đăng nhập
true: tài khoản Windows;
276 276
Khoa CNTT, Trường CĐ CNTT TP.HCM
false: Tài khoản SqlServer (ví dụ: sa)
using System; using System.Data; using System.Data.sqlClient; public partial class KetnoiCSDL : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { String StrCnn= @"Data Source=MINHVU-PC\SQLEXPRESS; Initial Catalog=QLbansach; User ID=sa;Password=;"; SqlConnection cnn = new SqlConnection(StrCnn); cnn.Open(); //Truy xuất, xử lý dữ liệu cnn.Close(); } }
277 277
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ: Tạo kết nối với CSDL SQLServer
Các thuộc tính Của Connection
Database: Tên CSDL
Provider: Tương ứng với Provider của HQTCSDL
Data Source: Tên Server
State: Tình trạng kết nối của Connection:
Closed: Kết nối đã đóng
Broken: Kết nối đã bị ngắt khi đã kết nối
Connecting: Đang kết nối
Executing: Kết nối đang thực hiện một lệnh
Fetching: Kết nối đang truy xuất dữ liệu
278 278
Khoa CNTT, Trường CĐ CNTT TP.HCM
Open: Kết nối đang mở
Các phương thức
Change Database: Thay đổi Database làm việc
Close : Đóng kết nối
Dispose: Giải phóng bộ nhớ
279 279
Khoa CNTT, Trường CĐ CNTT TP.HCM
Open: Thực hiện kết nối
7.2.2 Command
Sau khi tạo kết nối CSDL, mọi thao tác với nguồn
Tùy theo loại Connection đối tượng Command
thuộc tên miền:
dữ liệu có thể được thực hiện thông qua Command.
System.Data.SqlClient.SqlCommand
280 280
Khoa CNTT, Trường CĐ CNTT TP.HCM
System.Data.OleDb.OleDbCommand
Tạo Command
Cú pháp:
As New
281 281
Khoa CNTT, Trường CĐ CNTT TP.HCM
Hoặc
Các thuộc tính Của Command
CommandType: Loại Command
CommandText: Lệnh SQL hay tên Procedure
Text: (Mặc định): Là câu lệnh SQL
TableDirect: Tên của table (SQLProvider không hỗ trợ)
StoredProcedure: Tên thủ tục
SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandType = CommandType.Text; cmd.CommandText = "Select * From Khachhang";
282 282
Khoa CNTT, Trường CĐ CNTT TP.HCM
VD:
SqlCommand cmd = new SqlCommand("select * from Khachhang",cnn);
cnn : biến connection hoặc chuỗi connection string
VD: khai báo câu lệnh SQL trong SqlCommand
SqlCommand cmd = new SqlCommand; cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "Sachtheogia";
283
Khoa CNTT, Trường CĐ CNTT TP.HCM
VD: Khai báo sử dụng 1 StoredProcedure
? (khi sử dụng Access) @Tênbiến (khi sử dụng SQLServer) thay cho trị chưa xác định và khi thực hiện sẽ dùng đối tượng Parameters để truyền giá trị vào dấu ?/ @Tênbiến.
Parameters Lệnh SQL trong commandText có thể sử dụng
284 284
Khoa CNTT, Trường CĐ CNTT TP.HCM
Tùy theo Command Parameter sẽ khai báo khác nhau
OleDbParameter
OleDbParameter
OleDbParameter (
OleDbParameter
OleDbParameter (< Tên tham số >,
285 285
Khoa CNTT, Trường CĐ CNTT TP.HCM
Access
Các thuộc tính cần chú ý:
Input: (mặc định) Loại tham số đầu vào
Direction: Giá trị cho biết lọai tham số
InputOutput: Loại tham số đầu vào và ra
ReturnValue: Loại tham số nhận trị trả về
Output: Loại tham số đầu ra
OleDbType / SqlDbType: Kiểu dữ liệu của tham số.
ParameterName: Tên tham số
286 286
Khoa CNTT, Trường CĐ CNTT TP.HCM
Value: Giá trị tham số
287 287
Khoa CNTT, Trường CĐ CNTT TP.HCM
VD: Khi sử dụng OleDbCommand cmd.CommandText="Select * From KhachHang Where MaKH=?"; OleDbParameter Par = new OleDbParameter(); Par = cmd.CreateParameter(); Par.Value="KH01"; cmd.Parameters.Add(Par); VD: Khi sử dụng SqlDbCommand cmd.CommandText="Select * From KhachHang Where MaKH=@MaKH"; SqlParameter Par = new SqlParameter(); Par = cmd.CreateParameter(); Par.ParameterName="@MaKH"; Par.Value="KH01"; cmd.Parameters.Add(Par);
cmd.CommandText= "Select * From BangDiem Where Masv=? And MaMH=?";
OleDbParameter Par1 = new OleDbParameter();
cmd.CreateParameters.Add("Sinhvien",OleDbType.Char,4);
Par1.Value="SV01";
OleDbParameter Par2 = new OleDbParameter();
cmd.CreateParameters.Add("Monhoc",OleDbType.Char,4);
Par2.Value="MH01";
288 288
Khoa CNTT, Trường CĐ CNTT TP.HCM
Đưa tham số vào tập hợp Parameters VD: Khi sử dụng OleDbCommand
cmd.CommandText="Select * From BangDiem Where Masv=@MaSV and
MaMH = @MaMH ";
SqlParameter Par1 = new SqlParameter();
Par1 = cmd.Parameters.Add("@MaSV",SqlType.Char,4);
Par1.Value="SV01";
SqlParameter Par2 = new SqlParameter();
cmd.CreateParameters.Add("@MaMH",SqlType.Char,4);
Par2.Value="MH01";
289 289
Khoa CNTT, Trường CĐ CNTT TP.HCM
VD: Khi sử dụng SqlDbCommand
Tạo tham số và đưa vào tập hợp Parameters
290 290
Khoa CNTT, Trường CĐ CNTT TP.HCM
VD: Procedure SpKetQuaThi cần 2 tham số đầu vào: @MaSV , @MaMH và trả về Điểm thi của Môn học của sinh viên đó.
cmd.CommandText="spKetQuaThi";
cmd.CommandType=CommandType.StoredProcedure;
OleDbParameter ts3 = new OleDbParameter();
ts3.Direction=ParameterDirection.ReturnValue;
ts3.OleDbType=OleDb.OleDbType.Int;
cmd.parameters.Add(ts3);
OleDbParameter ts1 = new OleDbParameter();
cmd.Parameters.Add("@MaSV",OleDbType.Char,4);
ts1.Value="SV01";
OleDbParameter ts2 = new OleDbParameter();
cmd.Parameters.Add("@MAMH",OleDbType.Char,4);
ts2.Value="MH01";
291 291
Khoa CNTT, Trường CĐ CNTT TP.HCM
CREATE PROC SpKetQuaThi (
@MaSV varchar(2), @MaMH varchar(2), @DiemThi int output ) AS
292 292
Khoa CNTT, Trường CĐ CNTT TP.HCM
Select @DiemThi=DiemThi from SVMH where MaSV=@MaSV & MaMH = @MaMH;
SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; //bien connection; cmd.CommandText = "SVMH"; cmd.CommandType = CommandType.StoredProcedure; SqlParameter ts1 = new SqlParameter("@MaSV",SqlDbType.VarChar,4); SqlParameter ts2 = new SqlParameter("@MaMH",SqlDbType.VarChar,4); ts1.Value = "SV01"; ts2.Value = "MH01"; cmd.Parameters.Add(ts1); cmd.Parameters.Add(ts2); SqlParameter ts3 = new SqlParameter("@DiemThi",SqlDbType.Int); ts3.Direction = ParameterDirection.Output ; cmd.Parameters.Add(ts3); cmd.ExecuteNonQuery(); Label1.Text = cmd.Parameters["@DiemThi"].Value.ToString();
293 293
Khoa CNTT, Trường CĐ CNTT TP.HCM
Thực hiện Command:
SqlDataReader
Phương thức ExecuteReader: Trả về đối tượng DataReader để đọc dữ liệu mỗi lần một dòng với phương thức Read.(DataReader đọc dữ liệu trực tiếp từ nguồn nên phải duy trì kết nối đến khi đọc xong)
SqlDataReader dr;
dr = cmd.ExecuteReader;
while (dr.Read())
{
Label1.Text += dr["MaNXB"] + ", " + dr["TenNXB"] + "
";
}
294 294
Khoa CNTT, Trường CĐ CNTT TP.HCM
VD:
Thực hiện Command:
295 295
Khoa CNTT, Trường CĐ CNTT TP.HCM
Phương thức ExcuteNoneQuery: Dùng thực thi các phát biểu T-Sql như: Insert, Update, Delete, Create,… Phương thức này trả về số dòng dữ liệu chiệu tác động, ngược lại trả về -1. VD : cmd.ExcuteNonQuery() Phương thức ExcuteScalar: Trả về từ phát biểu SQL dạng Select chỉ có một cột một hàng, thường được dùng để thực thi các câu lệnh SQL như Count, Sum, Max, Min, AVG, …
SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; //Loại command là câu lệnh SQL cmd.CommandText = "Select Count(*) From Chude";
int count = (int)cmd.ExecuteScalar(); response.write(count.ToString()); cnn.Close();
response.write("Không thành công!");
try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); cmd.CommandType = CommandType.Text; //Mở kết nối và lấy dữ liệu cnn.Open(); } catch (Exception) { }
296 296
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 1: Sử dụng Command với câu lệnh Select
cmd.CommandText = "Insert Into Chude(tencd) Values(n'văn hóa')";
cmd.ExecuteNonQuery();
try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; //Biến Commnad thao tác Insert, Update, Delete cmd.CommandType = CommandType.Text; cnn.Open(); response.write("Thành công!"); cnn.Close(); } catch (Exception) { response.write("Thất bại!"); }
297 297
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 2: Sử dụng Command với lệnh Insert,Update,Delete
SqlConnection cnn = new SqlConnection("Data Source=(local);Initial
cmd.CommandText = "INSERT INTO CHUDE VALUES(@TENCHUDE)";
cmd.Parameters.Add(parTenLinhVuc); parTenLinhVuc.Value = TextBox1.Text;
try { Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; SqlParameter parTenLinhVuc = new SqlParameter("@TENCHUDE", SqlDbType.NVarChar, 50); cmd.CommandType = CommandType.Text; cnn.Open(); cmd.ExecuteNonQuery(); cnn.Close(); response.write("Thành công!"); } catch (Exception) { response.write("Thất bại!"); }
298 298
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 3: Command với lệnh Insert,Update,Delete + Tham số
7.2.3 DataReader
Là đối tượng truy cập dữ liệu trực tiếp, sử dụng con trỏ phía Server và duy trì kết nối với Server trong suốt quá trình đọc dữ liệu,
Tùy theo loại Connection mà DataReader thuộc tên miền:
System.Data.SqlClient.SqlDataReader
299 299
Khoa CNTT, Trường CĐ CNTT TP.HCM
System.Data.OleDb.OleDbDataReader
Các thuộc tính
300 300
Khoa CNTT, Trường CĐ CNTT TP.HCM
FieldCout: Số cột trên dòng hiện hành của DataReader IsClosed : Cho biết dataReader đã đóng Item: giá trị của cột truyền vào. Tham số truyền vào là tên cột hoặc số thứ tự tính từ 0.
Các phương thức
Close: Đóng DataReader
GetFieldType: Trả về kiểu dữ liệu của tham số truyền vào.
GetName: Trả về tên của cột truyền vào
GetValue: Trả về trị của cột truyền vào
Read: Di chuyển đến dòng kế tiếp và trả về true nếu còn dòng để di chuyển, ngược lại trả về False.
301 301
Khoa CNTT, Trường CĐ CNTT TP.HCM
Trong khi dataReader đang mở các thao tác dữ liệu trên nguồn dữ liệu đều không thể cho đến khi dataReader đóng lại bằng lệnh Close
SqlConnection cnn = new SqlConnection("Data Source=(local);Initial
list = list + dr["TenNXB"].ToString().Trim() + " ";
SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = "SELECT * FROM Nhaxuatban"; cmd.CommandType = CommandType.Text; cnn.Open(); IDataReader dr = cmd.ExecuteReader(); String list = ""; while (dr.Read()) { } dr.Close(); response.write(list.ToString()); cnn.Close();
try { Catalog=QLbansach;User ID=sa;Password="); } catch (Exception) { response.write("Thất bại!"); }
302 302
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 1:DataReader với lệnh Insert,Update,Delete +Tham số
SqlConnection cnn = new SqlConnection("Data
list = list + dr["TenNXB"].ToString();
SqlCommand cmd = new SqlCommand("Getnhaxuatban", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; cnn.Open(); IDataReader dr = cmd.ExecuteReader(); String list = ""; while (dr.Read()) { } dr.Close(); response.write(list.ToString()); cnn.Close();
try { Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); } catch (Exception) { response.write("Thất bại!"); }
303 303
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 2: DataReader + gọi procedure (VD: Getnhaxuatban)
Select * From Chude Where MaCD=@Machude
Create Procedure GetchudeByMaCD @Machude char(15) AS Begin End
304 304
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 2: DataReader + gọi procedure có tham số
SqlConnection cnn = new SqlConnection("Data Source=(local);Initial
SqlCommand cmd = new SqlCommand("GetchudeByMaCD", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; SqlParameter parMALINHVUC =
list = list + dr["Tenchude"].ToString();
try { Ctalog=QLbansach;User ID=sa;Password="); new SqlParameter("@Machude", SqlDbType.NChar, 10); parMAVHUDE.Value = TextBox1.Text; cmd.Parameters.Add(parMACHUDE); cnn.Open(); IDataReader dr = cmd.ExecuteReader(); String list = ""; while (dr.Read()) { } dr.Close(); response.write(list.ToString()); cnn.Close(); } catch (Exception) { response.write("Thất bại!"); }
305 305
Khoa CNTT, Trường CĐ CNTT TP.HCM
7.2.4 DataAdapter
Để lấy dữ liệu từ nguồn dữ liệu về cho ứng dụng, chúng ta sử dụng đối tượng DataAdapter. Đối tượng này cho phép ta lấy cấu trúc và dữ liệu của các bảng.
DataAdapter là một bộ gồm 4 đối tượng:
SelectCommand: Cho phép lấy thông tin từ nguồn.
InsertCommand: Cho phép thêm dữ liệu vào bảng trong nguồn.
UpdateCommand: Cho phép điều chỉnh dữ liệu của bảng trong nguồn.
306 306
Khoa CNTT, Trường CĐ CNTT TP.HCM
DeleteCommand: Cho phép xóa dữ liệu của bảng trong nguồn.
Tạo DataAdapter
Cú pháp:
New
307 307
Khoa CNTT, Trường CĐ CNTT TP.HCM
DataAdapter chỉ thao tác với nguồn dữ liệu qua đối tượng connection đang kết nối, khi Connection chưa mở thì DataAdapter sẽ tự động mở kết nối khi cần và đóng lại
Các thuộc tính của DataAdapter
DeleteCommand: Đối tượng Command chứa nội dung lệnh hủy các mẫu tin trên nguồn dữ liệu.
InsertCommand: Đối tượng Command chứa nội dung lệnh thêm các mẫu tin trên nguồn dữ liệu.
SelectCommand: Đối tượng Command chứa nội dung lệnh truy xuất các mẫu tin trên nguồn dữ liệu.
308 308
Khoa CNTT, Trường CĐ CNTT TP.HCM
UpdateCommand: Đối tượng Command chứa nội dung lệnh sửa các mẫu tin trên nguồn dữ liệu.
Lấy dữ liệu từ nguồn:
Các chức năng của DataAdapter
- DataTable: Fill(
- DataSet: Fill(
Dữ liệu lấy về DataSet dưới dạng các dataTable với tên là: Table0,Table1, Table2. . .
- Đổ dữ liệu vào Datset cho bảng DataTable nếu chưa có sẽ tạo mới:
309 309
Khoa CNTT, Trường CĐ CNTT TP.HCM
Fill(
Phương thức trả về số mẫu tin lấy được Dataset DS as New Dataset() Integer so; so= DA.Fill(DS, “Sinhvien”) Để cập nhật dữ liệu về nguồn
310 310
Khoa CNTT, Trường CĐ CNTT TP.HCM
Update(
7.2.5 Dataset
Dataset là một mô hình CSDL quan hệ thu nhỏ
đáp ứng nhu cầu của ứng dụng.
Dataset chứa các bảng (DataTable), các quanhệ
(DataRelation) và các ràng buộc (constraint)
Dataset thuộc tên miền: System.Data.Dataset.
Khai báo
New System.Data.Dataset()
Hoặc
New System.Data.Dataset(
311 311
Khoa CNTT, Trường CĐ CNTT TP.HCM
Các phương thức
Thêm một bảng vào Dataset
Tables.Add()
Một bảng mới tự động được tạo ra với tên
mặc định Table1, Table2 . . .
Tables.Add(
Tables.Remove(
312 312
Khoa CNTT, Trường CĐ CNTT TP.HCM
Một bảng mới tạo ra theo đúng
Tables.Contains(
Tables.IndexOf(
313 313
Khoa CNTT, Trường CĐ CNTT TP.HCM
Kiểm tra bảng có thuộc về Dataset
Lấy chỉ số của bảng
Lấy số bảng trong Dataset
Tables.Count
Lấy ra một bảng trong Dataset
Tables(
Clear()
Clone()
Dispone() Giải phóng mọi tài nguyên trên vùng nhớ
Để hủy các thay đổi trên Dataset RejectChanges() Để xóa bỏ mọi dữ liệu trên dataSet Để tạo một bản sao của Dataset Để xóa bỏ Dataset Dataset đang sử dụng. Tạo quan hệ giữa hai bảng trong Dataset.
Relations.Add(
Xóa quan hệ giữa hai bảng trong Dataset.
314 314
Khoa CNTT, Trường CĐ CNTT TP.HCM
Relations.Remove(
7.2.6 DataTable
New DataTable();
New DataTable(
315 315
Khoa CNTT, Trường CĐ CNTT TP.HCM
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 : System.Data.dataTable. Cú pháp: DataTable được hình thành từ DataColumn và DataRow.
SqlConnection cnn = new SqlConnection("Data Source=(local);Initial
SqlDataAdapter da=new SqlDataAdapter("select * from CHUDE", cnn); SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow row in ds.Tables[0].Rows) if (row["MaCD"]=="1") {
row["TENCHUDE"] = "BBB";
try { Catalog=QLbansach;User ID=sa;Password="); } response.write(ds.Tables[0].Rows[2].ItemArray[1].ToString()); GridView1.DataSource = ds.Tables[0]; //Không sử dụng SqlCommandBuilder thì không thể update dữ liệu. da.Update(ds); } catch (Exception) { response.write("Thất bại!"); }
316 316
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 1: DataAdapter + update dữ liệu
SqlConnection cnn = new SqlConnection("Data
try { Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlDataAdapter da = new SqlDataAdapter("GETNXB", cnn); DataSet ds = new DataSet(); da.Fill(ds); response.write(ds.Tables[0].Rows[2].ItemArray[1].ToString()); GridView2.DataSource = ds.Tables[0]; } catch (Exception) { response.write("Thất bại!"); }
317 317
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 2: DataAdapter + Procedure(GetNXB)
SqlConnection cnn = new SqlConnection("Data Source=(local);Initial
SqlCommand cmd = new SqlCommand("Getchude", cnn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter parMACD = new SqlParameter("@MACD", SqlDbType.NChar,
parMACD.Value = "1"; cmd.Parameters.Add(parMACD); cnn.Open(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds.Tables[0]; cnn.Close();
try { Catalog=QLbansach;User ID=sa;Password="); 10); } catch (Exception) { response.write("Thất bại!"); }
318 318
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 3: DataAdapter + Procedure tham số (Getchude)
319 319
try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand("GETNXB", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; cnn.Open(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; //da.InsertCommand = cmd; //da.DeleteCommand = cmd; //da.UpdateCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); cnn.Close(); } catch (Exception) { response.write("Thất bại!"); }
Khoa CNTT, Trường CĐ CNTT TP.HCM
Ví dụ 4: DataAdapter + Đối số là command
7.3. Xây Dựng Lớp Xử Lý Dữ Liệu
Để các thao tác với CSDL thuận lợi. Ta nên xây dựng lớp xử lý dữ liệu đảm nhận việc kết nối CSDL và các thủ tục xử lý.
Docbang(string LenhSQL): Nhằm thực hiện câu lệnh truy vấn SQL để trả về dữ liệu là 1 DataTable Thuchienlenh(string LenhSQL): Nhằm thực hiện câu lệnh Insert, Update, Delete để cập nhật dữ liệu cho CSDL. Thực hiện:
320 320
Khoa CNTT, Trường CĐ CNTT TP.HCM
Tạo cấu hình chuỗi kết nối CSDL trong tập tin Webconfig. (Có thể dùng SQLDatasource để sinh mã)
Tên lớp: XLDL.cs
Tạo mới lớp XLDL.cs: Thêm mới 1 Item
321 321
Khoa CNTT, Trường CĐ CNTT TP.HCM
Sẽ lưu lớp này trong thư mục App_Code
Thực hiện mã code cho lớp XLDL.cs . . . using System.Data.SqlClient; public class XLDL { static string StrCnn = ConfigurationManager.ConnectionStrings["KetnoiCSDL"]. ConnectionString.ToString(); public static DataTable Docbang(string LenhSQL) { using (SqlConnection cnn = new SqlConnection(StrCnn)) { SqlDataAdapter bodocghi = new SqlDataAdapter(LenhSQL, cnn); DataTable bang = new DataTable(); bodocghi.Fill(bang); return bang; } } . . .
322 322
Khoa CNTT, Trường CĐ CNTT TP.HCM
. . . public static void thuchienlenh(string LenhSQL) { using (SqlConnection cnn = new SqlConnection(StrCnn)) { cnn.Open(); SqlCommand bolenh = new SqlCommand(LenhSQL, cnn); bolenh.ExecuteNonQuery(); cnn.Close(); } } }
323 323
Khoa CNTT, Trường CĐ CNTT TP.HCM