Bài giảng Lập trình cơ sở dữ liệu - Chương 4: Cập nhật dữ liệu trình bày những nội dung cơ bản sau: Câu lệnh SQL, cùng đối tượng Command, chỉnh sửa dữ liệu Disconnected, dùng đối tượng Command với DataTable/DataSet, dùng đối tượng DataAdapter, đùng đối tượng CommandBuilder, cấu hình DataAdapter “bằng tay”.
Chương CẬP NHẬT DỮ LIỆU Nội dung Câu lệnh SQL Dùng đối tượng Command Chỉnh sửa liệu Disconnected Dùng đối tượng Command với DataTable/DataSet Dùng đối tượng DataAdapter Dùng đối tượng CommandBuilder Cấu hình DataAdapter “bằng tay” Câu lệnh SQL Câu lệnh Insert Câu lệnh Update Câu lệnh Delete Câu lệnh SQL Insert Câu lệnh Insert dùng để thêm dòng liệu vào bảng • Thêm dịng hồn chỉnh • Thêm số phần liệu dịng • Thêm liệu lấy từ bảng khác Thêm dòng hoàn chỉnh Insert into tênBang Values(giatri1, giatri2, …, giatriN) Insert into tênBang(cot1, cot2, …, cotN) Values(giatri1, giatri2, …, giatriN) Câu lệnh SQL Insert Thêm số phần liệu dòng Insert into tênBang(cotK1, cotK2, …) Values(giatriK1, giatriK2, …) • Cột khơng liệt kê nhận giá trị NULL Thêm liệu lấy từ bảng khác Insert into tênBang1(cot1, cot2, …, CotN) Select cot1, Cot2, …, CotN From tênBang2 Where … Câu lệnh SQL Insert Chú ý: • Từ khố Into câu lệnh Insert bỏ, khơng nên bỏ • Nên liệt kê cột liệu dùng câu lệnh insert liệu Câu lệnh SQL Insert Copy từ bảng sang bảng khác Select * into tênBangMoi From tênBang1 Select cotK1, cotK2, … into tênBangMoi From tênBang1, tênBang2, … Where … Group By … Hoạt động: • Tạo bảng “tênBangMoi” • Chép liệu vào “tênBangMoi” Câu lệnh SQL Update Câu lệnh Update dùng để cập nhật (chỉnh sửa) liệu Update tênBang Set cot1=newValue1, …, cotN=newValueN Where cot1 = oldValue1 and … and cotN=oldValueN Để xóa giá trị ô liệu bảng, thiết lập giá trị null Update tênBang Set cot1=null, … Where cotA = oldValueA … Câu lệnh SQL Delete Câu lệnh Delete dùng để xóa số dòng liệu bảng Delete From tênBang Where cot1=giatri1 and cot2=giatri2 and … and cotN=giatriN Chú ý: • Delete dùng để xóa dịng, khơng xóa cột dịng • Delete khơng xóa bảng, xóa liệu • Để xóa dịng liệu bảng nên dùng lệnh Truncate Table • Từ khóa From câu lệnh delete bỏ, khơng nên bỏ Dùng đối tượng Command Các bước thực Đối tượng Command khơng có tham số Đối tượng Command có tham số 10 Dùng đối tượng Command với DataTable/DataSet Cập nhật DataRow vào CSDL int SubmitUpdate(DataRow row, SqlCommand cmdUpdate) { SqlParameterCollection pc = cmdUpdate.Parameters; pc["@Cot1"].Value = row["Cot1"]; pc["@Cot2"].Value = row["Cot2"]; … pc["@OrginCot1"].Value = row["Cot1", DataRowVersion.Original]; pc["@OriginCot2"].Value = row["Cot2", DataRowVersion.Original]; … return cmdUpdate.ExecuteNonQuery(); } 33 Dùng đối tượng DataAdapter Đối tượng DataAdapter có nhiệm vụ • Lấy liệu từ data source lưu trữ liệu vào đối tượng Disconnected (DataSet, DataTable) • Cập nhật liệu từ đối tượng Disconnected vào data source 34 Dùng đối tượng DataAdapter DataSet Data source DataAdapter DataTable Fill Fill Update Update DataAdapter DataTable Fill Fill Update Update 35 Dùng đối tượng DataAdapter Để cập nhật liệu, DataAdapter dùng câu lệnh SQL Insert/Update/Delete lưu đối tượng Command DataAdapter • InsertCommand • UpdateCommand • DeleteCommand 36 Dùng đối tượng DataAdapter Chúng ta có lựa chọn để tạo đối tượng Command DataAdapter • Dùng đối tượng SqlCommandBuilder để sinh đối tượng Command lúc thực thi (run time) • Cấu hình đối tượng Command “bằng tay” • Dùng Data Adapter Configuration Wizard lúc thiết kế (design time) 37 Dùng đối tượng CommandBuilder SqlCommandBuilder sinh câu lệnh Insert/Update/Delete dựa câu lệnh select cung cấp SqlCommandBuilder sinh câu lệnh Insert/Update/Delete điều kiện sau thỏa mãn • Câu lệnh Select truy vấn bảng • Câu lệnh Select có chứa khóa 38 Dùng đối tượng CommandBuilder Xây dựng đối tượng Command cập nhật liệu string strSQL = "Select cot1, cot2,…" + " From tenBang …"; … SqlDataAdapter da = new SqlDataAdapter(cmd); SqlCommandBuilder cb = new SqlCommandBuilder(da); … … da.Update(tenBang); 39 Cấu hình DataAdapter “bằng tay” Khái niệm Tạo Command cho câu lệnh Insert Tạo Command cho câu lệnh Update Tạo Command cho câu lệnh Delete Cập nhật liệu 40 Cấu hình DataAdapter “bằng tay” Khái niệm Để vượt qua giới hạn SqlCommandBuilder, tự xây dựng đối tượng command cho data adapter Chú ý: Khi thêm parameter cho đối tượng command DataAdapter, dùng thuộc tính đối tượng Parameter thiết kế cho việc cập nhật liệu: param.SourceColumn, param.SourceVersion 41 Cấu hình DataAdapter “bằng tay” Khái niệm param.SourceColumn = “tênCột” • Chỉ kết nối paramter (param) với cột (tênCột) DataTable param.SourceVersion = • DataRowVersion.Current (default) • DataRowVersion.Original • Cho biết Phiên liệu DataRow sử dụng cho parameter 42 Cấu hình DataAdapter “bằng tay” Tạo Command cho câu lệnh Insert private SqlCommand CreateInsertCommand() { string strSQL = "insert into tenBang(cot1, cot2, …)" + " values(@p1,@p2,…)"; SqlCommand cmd = new SqlCommand(strSQL, conn); SqlParameterCollection pc = cmd.Parameters; SqlParameter paramP1 = new SqlParameter("@p1", SqlDbType.Kieu,…); paramP1.SourceColumn = “cot1”; … pc.Add(paramP1); … return cmd; } 43 Cấu hình DataAdapter “bằng tay” Tạo Command cho câu lệnh Update private SqlCommand CreateUpdateCommand() { string strSQL = “update tenBang" + " set cot1=@p1, cot2=@p2,…“+ “ where cot1=@q1 and cot2=q2 …”; SqlCommand cmd = new SqlCommand(strSQL, conn); SqlParameterCollection pc = cmd.Parameters; SqlParameter paramP1 = new SqlParameter("@p1", SqlDbType.Kieu,…); paramP1.SourceColumn = “cot1”; … SqlParameter paramQ1 = new SqlParameter("@q1", SqlDbType.Kieu,…); paramQ1.SourceColumn = “cot1”; paramQ1.SourceVersion = DataRowVersion.Original; … pc.Add(paramP1); pc.Add(paramQ1); … return cmd; } 44 Cấu hình DataAdapter “bằng tay” Tạo Command cho câu lệnh Delete private SqlCommand CreateDeleteCommand() { string strSQL = “delete from tenBang" + " where cot1=@q1 and cot2=q2 …”; SqlCommand cmd = new SqlCommand(strSQL, conn); SqlParameterCollection pc = cmd.Parameters; SqlParameter paramQ1 = new SqlParameter("@q1", SqlDbType.Kieu,…); paramQ1.SourceColumn = “cot1”; paramQ1.SourceVersion = DataRowVersion.Original; … pc.Add(paramQ1); … return cmd; } 45 Cấu hình DataAdapter “bằng tay” Cập nhật liệu void SubmitChanges() { da.InsertCommand = CreateInsertCommand(); da.UpdateCommand = CreateUpdateCommand(); da.DeleteCommand = CreateDeleteCommand(); da.Update(dt); } 46 Tóm tắt chương 47 ... trả ExecuteNonQuery() để xác định lệnh cập nhật có thành cơng khơng – Nếu cập nhật thành cơng gọi AcceptChanges() – Nếu cập nhật không thành công thiết lập lỗi cho thuộc tính RowError đối tượng... cmd.ExecuteNonQuery(); } 18 Chỉnh sửa liệu Disconnected Trạng thái DataRow Thêm dòng liệu Chỉnh sửa dịng liệu Xóa dòng liệu Phiên liệu DataRow 19 Chỉnh sửa liệu Disconnected Trạng thái DataRow... DataRowVersion.Original]; 26 Chỉnh sửa liệu Disconnected Phiên liệu DataRow Các giá trị enum DataRowVersion • Current • Original • Proposed • Default - Lấy giá trị tai - Lấy giá trị gốc - Lấy giá trị sau BeginEdit