CẬP NHẬT DỮ LIỆU
Chương 4
2
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”
3
Câu lệnh SQL
Câu lệnh Insert
Câu lệnh Update
Câu lệnh Delete
4
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 hoà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 hoàn chỉnh
Insert into tênBang
Values(giatri1, giatri2, …, giatriN)
Insert into tênBang(cot1, cot2, …, cotN)
Values(giatri1, giatri2, …, giatriN)
5
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 …
6
Câu lệnh SQL
Insert
Chú ý:
•
Từ khoá 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
7
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”
8
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 …
9
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ỏ
10
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ố
11
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
12
Dùng đối tượng Command
Đối tượng Command không có tham số
string strSQL =
"INSERT INTO tênBang(cot1, …) " +
" VALUES (giatri1, …)";
SqlCommand cmd = new SqlCommand(strSQL, conn);
int numberOfRows = cmd.ExecuteNonQuery();
Câu lệnh Insert
13
Dùng đối tượng Command
Đối tượng Command không có tham số
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();
Câu lệnh Update
14
Dùng đối tượng Command
Đối tượng Command không có tham số
string strSQL =
"DELETE FROM tênBang" +
" WHERE cot1=giatri1 and … and cotN=giatriN";
SqlCommand cmd = new SqlCommand(strSQL, conn);
int numberOfRows = cmd.ExecuteNonQuery();
Câu lệnh Delete
15
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;
}
16
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;
}
17
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;
}
18
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();
}
19
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
20
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
21
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);
22
Chỉnh sửa dữ liệu Disconnected
Chỉnh sửa các dòng dữ liệu
Cách 1:
DataRow row;
int index;
…
row = tenBang.Rows[index];
row["cot1"] = giatrimoi1;
row["cot2"] = giatrimoi2;
…
Cách 2:
DataRow row;
int index;
…
row = tenBang.Rows[index];
row.BeginEdit();
row["cot1"] = giatrimoi1;
row["cot2"] = giatrimoi2;
…
row.EndEdit();
23
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, … };
24
Chỉnh sửa dữ liệu Disconnected
Xóa các dòng dữ liệu
Cách 1:
DataRow row;
int index;
…
row = tenBang.Rows[index];
row.Delete();
Cách 2:
DataRow row;
int index;
…
row = tenBang.Rows[index];
tenBang.Remove(row);
25
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);