Chương 4
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 dữ 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”
2
Câu lệnh SQL
Câu lệnh Insert
Câu lệnh Update
Câu lệnh Delete
3
Câu lệnh SQL
Insert
Câu lệnh Insert dùng để thêm 1 dòng dữ liệu vào
bảng
• Thêm 1 dịng hồn chỉnh
• Thêm 1 số phần dữ liệu của 1 dịng
• Thêm dữ liệu được lấy từ 1 bảng khác
Thêm 1 dịng hồn chỉnh
Insert into tênBang
Values(giatri1, giatri2, …, giatriN)
Insert into tênBang(cot1, cot2, …, cotN)
Values(giatri1, giatri2, …, giatriN)
4
Câu lệnh SQL
Insert
Thêm 1 số phần dữ liệu của 1 dịng
Insert into tênBang(cotK1, cotK2, …)
Values(giatriK1, giatriK2, …)
• Cột khơng liệt kê ra sẽ nhận giá trị NULL
Thêm dữ liệu được lấy từ 1 bảng khác
Insert into tênBang1(cot1, cot2, …, CotN)
Select cot1, Cot2, …, CotN
From tênBang2
Where …
5
Câu lệnh SQL
Insert
Chú ý:
• Từ khố Into trong câu lệnh Insert có thể bỏ,
nhưng khơng nên bỏ
• Nên liệt kê các cột dữ liệu khi dùng câu lệnh
insert dữ liệu
6
Câu lệnh SQL
Insert
Copy từ 1 bảng sang 1 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 dữ liệu vào “tênBangMoi”
7
Câu lệnh SQL
Update
Câu lệnh Update dùng để cập nhật (chỉnh sửa) dữ liệu
Update tênBang
Set cot1=newValue1, …, cotN=newValueN
Where cot1 = oldValue1 and … and cotN=oldValueN
Để xóa giá trị của 1 ô dữ liệu trong bảng,
chúng ta thiết lập giá trị đó bằng null
Update tênBang
Set cot1=null, …
Where cotA = oldValueA …
8
Câu lệnh SQL
Delete
Câu lệnh Delete dùng để xóa 1 số dòng dữ liệu trong
bảng
Delete From tênBang
Where cot1=giatri1 and cot2=giatri2 and … and
cotN=giatriN
Chú ý:
• Delete dùng để xóa cả 1 dịng, chứ khơng xóa 1
cột của dịng
• Delete khơng xóa bảng, chỉ xóa dữ liệu
• Để xóa mọi dịng dữ liệu trong bảng nên dùng
lệnh Truncate Table
• Từ khóa From trong câu lệnh delete có thể bỏ,
nhưng khơng nên bỏ
9
Dùng đối tượng Command
Các bước thực hiện
Đối tượng Command không có tham số
Đối tượng Command có tham số
10
Dùng đối tượng Command
Các bước thực hiện
3 bước sử dụng đối tượng command để cập nhật dữ
liệu
• Bước 1: Tạo câu SQL
• Bước 2: Tạo đối tượng Command chứa câu SQL
• Bước 3: Gọi phương thức ExecuteNonQuery()
của đối tượng Command
11
Dùng đối tượng Command
Đối tượng Command khơng có tham số
Câu lệnh Insert
string strSQL =
"INSERT INTO tênBang(cot1, …) " +
"
VALUES (giatri1, …)";
SqlCommand cmd = new SqlCommand(strSQL, conn);
int numberOfRows = cmd.ExecuteNonQuery();
12
Dùng đối tượng Command
Đối tượng Command khơng có tham số
Câu lệnh Update
string strSQL =
"UPDATE tênBang" +
" SET cot1 = newValue1,…, cotN=giatriN" +
" WHERE cot1=oldValue1 and … and cotN=oldValueN";
SqlCommand cmd = new SqlCommand(strSQL, conn);
int numberOfRows = cmd.ExecuteNonQuery();
13
Dùng đối tượng Command
Đối tượng Command khơng có tham số
Câu lệnh Delete
string strSQL =
"DELETE FROM tênBang" +
"
WHERE cot1=giatri1 and … and cotN=giatriN";
SqlCommand cmd = new SqlCommand(strSQL, conn);
int numberOfRows = cmd.ExecuteNonQuery();
14
Dùng đối tượng Command
Đối tượng Command có tham số
Phương thức tạo câu lệnh Insert
SqlCommand CreateInsertCommand()
{
string strSQL;
strSQL = "Insert tênBang(cot1, …) " +
" values(@cot1, …)";
SqlCommand cmd = new SqlCommand(strSQL, conn);
SqlParameterCollection pc = cmd.Parameters;
pc.Add("@cot1", SqlDbType.Kieu);
…
return cmd;
}
15
Dùng đối tượng Command
Đối tượng Command có tham số
Phương thức tạo câu lệnh Update
SqlCommand CreateUpdateCommand()
{
string strSQL;
strSQL =
"Update tênBang " +
" set cot1=@cot1, …, cotN=@cotN " +
" where cot1=@OrigCot1 and … and cotN=@OrigCotN";
SqlCommand cmd = new SqlCommand(strSQL, conn);
SqlParameterCollection pc = cmd.Parameters;
pc.Add("@cot1", SqlDbType.Kieu);
…
pc.Add(@OrigCot1, SqlDbType.Kieu)
…
return cmd;
}
16
Dùng đối tượng Command
Đối tượng Command có tham số
Phương thức tạo câu lệnh Delete
SqlCommand CreateDeleteCommand()
{
string strSQL;
strSQL =
"Delete from tênBang " +
" where @cot1=giatri1 and … and @cotN=giatriN";
SqlCommand cmd = new SqlCommand(strSQL, conn);
SqlParameterCollection pc = cmd.Parameters;
pc.Add("@cot1", SqlDbType.Kieu);
…
return cmd;
}
17
Dùng đối tượng Command
Đối tượng Command có tham số
Sử dụng các đối tượng command có tham số
int SubmitInsert/Update/Delete()
{
SqlCommand cmd = CreateInsertCommand();
//SqlCommand cmd = CreateUpdateCommand();
//SqlCommand cmd = CreateDeleteCommand();
cmd.Parameters[@tenThamSo] = giatri;
…
return cmd.ExecuteNonQuery();
}
18
Chỉnh sửa dữ liệu Disconnected
Trạng thái của DataRow
Thêm các dòng dữ liệu mới
Chỉnh sửa các dịng dữ liệu
Xóa các dịng dữ liệu
Phiên bản dữ liệu trong DataRow
19
Chỉnh sửa dữ liệu Disconnected
Trạng thái của DataRow
Khi chúng ta thao tác trên đối tượng DataRow,
DataRow sẽ tự động ghi nhận lại thao tác đó vào
property trạng thái tenRow.RowState.
RowState thuộc kiểu DataRowState
•
•
•
•
•
DataRowState.Added
DataRowState.Deleted
DataRowState.Detached
DataRowState.Modified
DataRowState.Unchanged
20
Chỉnh sửa dữ liệu Disconnected
Thêm các dòng dữ liệu mới
Cách 1:
DataRow row;
row = tenBang.NewRow();
row["cot1"] = giatri1;
row["cot2"] = giatri2;
…
tenBang.Rows.Add(row);
Cách 2:
object[] rowValues = {giatri1,giatri2,…};
tenBang.LoadDataRow(rowValues, false);
21
Chỉnh sửa dữ liệu Disconnected
Chỉnh sửa các dòng dữ liệu
Cách 1:
Cách 2:
DataRow row;
int index;
…
row = tenBang.Rows[index];
row["cot1"] = giatrimoi1;
row["cot2"] = giatrimoi2;
…
DataRow row;
int index;
…
row = tenBang.Rows[index];
row.BeginEdit();
row["cot1"] = giatrimoi1;
row["cot2"] = giatrimoi2;
…
row.EndEdit();
22
Chỉnh sửa dữ liệu Disconnected
Chỉnh sửa các dòng dữ liệu
Cách 3:
DataRow row;
int index;
…
row = tenBang.Rows[index];
row.ItemArray = new object[]{giatri1, giatri2, … };
23
Chỉnh sửa dữ liệu Disconnected
Xóa các dịng dữ liệu
Cách 1:
Cách 2:
DataRow row;
int index;
…
row = tenBang.Rows[index];
row.Delete();
DataRow row;
int index;
…
row = tenBang.Rows[index];
tenBang.Remove(row);
24
Chỉnh sửa dữ liệu Disconnected
Xóa các dịng dữ liệu
Cách 3:
DataRow row;
int index;
…
tenBang.RemoveAt(index);
25