Các đối tượng trong ADO.Net
Đối tượng Command: thực thi câu lệnh SQL
hoặc một Stored procedure
Một Data Command là một thể hiện của class
OleDbCommand hoặc class SqlCommand
Các phương thức của DataCommand
Cancel(): Huỷ bỏ thực thi của một
SqlCommand
CreateParameter():Tạo một thể hiện mới cho
đối tượng SqlParameter.
57 trang |
Chia sẻ: candy98 | Lượt xem: 529 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình Windows Nâng cao - Buổi 3 - Bùi Công Danh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1NỘI DUNG
Ôn tập ADO.NET
Trình bày mẫu các chức năng:
Đăng nhập
Cấu hình
Đổi mật khẩu
Nội dung tuần sau
07/09/2016
2ÔN TẬPADO.NET
1. Thư viện System.Data.SqlClient
2. Lớp SqlConnection
3. Lớp SqlCommand
4. Lớp SqlDataAdapter
5. Lớp SqlDataReader
6. Lớp DataSet
7. Lớp DataTable
07/09/2016
3Mô hình đối tượng ADO.NET
07/09/2016
4Mô hình đối tượng ADO.NET
07/09/2016
5CẤU TRÚC CỦA ADO.NET
07/09/2016
6Các đối tượng trong ADO.Net
Đối tượng Command: thực thi câu lệnh SQL
hoặc một Stored procedure
Một Data Command là một thể hiện của class
OleDbCommand hoặc class SqlCommand
07/09/2016
7Các đối tượng trong ADO.Net
Các phương thức của DataCommand
Cancel(): Huỷ bỏ thực thi của một
SqlCommand
CreateParameter():Tạo một thể hiện mới cho
đối tượng SqlParameter.
07/09/2016
8Các đối tượng trong ADO.Net
Các phương thức của DataCommand
Cancel(): Huỷ bỏ thực thi của một SqlCommand
CreateParameter():Tạo một thể hiện mới cho đối
tượng SqlParameter.
07/09/2016
9Các đối tượng trong ADO.Net
ExecuteNonQuery(): Thực thi một câu lệnh T-SQL
dựa vào Connection và trả về số mẫu tin bị ảnh hưởng
như UPDATE, INSERT, DELETE.
ExecuteScalar(): Trả về giá trị đơn (Giá trị cụ thể như
1 table, 1 record, 1 filed ) từ một truy vấn dữ liệu.
ExecuteReader(): Gửi CommandText đến
Connection và xây dựng một SqlDataReader, trả về
tập các records
07/09/2016
10
Các đối tượng trong ADO.Net
Các thuộc tính của Data Command
Connection: Command tham chiếu đến một connection, đối
tượng này dùng để giao tiếp với cơ sở dữ liệu, nhận hay
trả về SqlConnection mà command sử dụng
CommandText: nhận hoặc trả về câu lệnh
T-Sql hay thủ tục để thực thi
07/09/2016
11
Các đối tượng trong ADO.Net
CommandTimeout: nhận hay trả về thời gian chờ
thực thi
CommandType: nhận/ trả về giá trị cho biết loại
commandtext được gán, các giá trị gồm
StoredProcedure, TableDirect,Text. Mặc định là
Text
OleDbCommand cmd = new OleDbCommand(strsql,con);
(với strsql là câu truy vấn cụ thể )
07/09/2016
12
Các đối tượng trong ADO.Net
DataReader: được sử dụng trong những ứng dụng
web với những thao tác ngắn với từng yêu cầu,
thường là chỉ để hiển thị dữ liệu.
Có 2 loại DataReader: OleDbDataReader và
SqlDataReader.
DataReader cung cấp cách truy xuất dữ liệu forward-
only, read – only.
07/09/2016
13
Các đối tượng trong ADO.Net
Để dùng SqlDataReader phải khai báo một
SqlCommand. SqlCommand cung cấp một
phương thức ExecuteReader() mà nó trả về
một SqlDataReader khi thi hành một câu lệnh
SQL hoặc một stored Procedure
07/09/2016
14
Các đối tượng trong ADO.Net
OleDbCommand cmd;
String strSql;
strSql = "select * from tblsv";
cmd = new OleDbCommand(strSql, con);
rd = cmd.ExecuteReader();
OleDbCommand cmd;
String strSql;
strSql = "select * from tblsv";
cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandText = strSql;
rd = cmd.ExecuteReader();
Tương đương
07/09/2016
15
Phương thức của DataReader
Read(): Đọc tới record cuối cùng EOF.
NextResult(): di chuyển tới record kế tiếp
Để đọc giá trị của từng field. Sử dụng câu lệnh:
DataReader rs;// Khai báo
rs[“NameFiled”] or rs[index]
Chú ý: Nhớ Convert về kiểu chuỗi
Example: varName=Convert.ToString(rs[“Name”])
Các đối tượng trong ADO.Net
07/09/2016
16
ÔN TẬPADO.NET
2. Lớp SqlConnection
Để tương tác với database, bạn phải có một kết
nối tới nó. Kết nối giúp xác định database
server, database name, user name, password,
và các tham số cần thiết để kết nối tới
database. Một đối tượng connection được dùng
bởi đối tượng command vì thế chúng sẽ biết
database nào để thực thi lệnh.
07/09/2016
17
Mô hình sau cho ta thấy cách mà SqlConnection được sử
dụng bởi các đối tượng ADO.NET khác:
ÔN TẬPADO.NET
07/09/2016
18
ÔN TẬPADO.NET
3. Lớp SqlCommand
Quá trình tương tác với database cần phải biết hành động
nào bạn muốn xảy ra. Điều này được thực hiện bởi đối tượng
command. Bạn dùng đối tượng command để gửi một câu
lệnh SQL tới database. Một đối tượng command dùng một
đối tượng connection để xác định database nào sẽ được truy
xuất. Bạn có thể dùng một đối tượng command riêng lẻ để
thực thi lệnh trực tiếp, hoặc để gắn một tham chiếu của đối
tượng command cho một SqlDataAdapter – đối tượng giữ
các command sẽ làm việc trên một nhóm dữ liệu như sẽ đề
cập tới trong phần dưới.
07/09/2016
19
ÔN TẬPADO.NET
4. Lớp SqlDataAdapter
Đôi lúc dữ liệu mà bạn làm việc là read-only và bạn
ít khi cần thay đổi dữ liệu nguồn. Vài trường hợp cần
lưu trữ tạm dữ liệu trong bộ nhớ để hạn chế truy xuất
đến database. Data adapter làm điều này dễ dàng
bằng cách giúp bạn quản lý dữ liệu trong chế độ ngắt
kết nối. Data adapter sẽ đổ vào DataSet khi đọc dữ
liệu và thực hiện thay đổi dữ liệu một lượt vào
database.
07/09/2016
20
ÔN TẬPADO.NET
4. Lớp SqlDataAdapter
Data adapter chứa một tham chiếu đến đối tượng
connection và mở/đóng kết nối tự động khi đọc và
ghi dữ liệu vào database. Hơn nữa, data adapter chứa
đối tượng command cho những thao tác SELECT,
INSERT, UPDATE và DELETE trên dữ liệu. Bạn sẽ
có một data adapter được định nghĩa cho mỗi table
trong một DataSet và nó sẽ quản lý các giao tiếp với
database cho bạn. Tất cả những gì bạn cần làm là chỉ
cho data adapter khi nào nạp hoặc ghi vào
07/09/2016
21
ÔN TẬPADO.NET
5. Lớp SqlDataReader
Nhiều thao tác dữ liệu đòi hỏi bạn chỉ lấy một luồng dữ
liệu để đọc. Đối tượng data reader cho phép bạn lấy
được kết quả của một câu lệnh SELECT từ một đối
tượng command. Để tăng hiệu suất, dữ liệu trả về từ một
data reader là một luồng dữ liệu fast forward-only. Có
nghĩa là bạn chỉ có thể lấy dữ liệu từ luồng theo một thứ
tự nhất định. Mặc dù điều này có lợi về mặt tốc độ,
nhưng nếu bạn cần phải thao tác dữ liệu, thì một DataSet
sẽ là một đối tượng tốt hơn để làm việc.
07/09/2016
22
ÔN TẬPADO.NET
6. Lớp DataSet
Đối tượng DataSet là một thể hiện của dữ liệu trong bộ nhớ.
Chúng chứa nhiều đối tượng DataTable, bên trong DataTable
lại có nhiều column và row, giống như các database table
thông thường. Bạn thậm chí có thể định nghĩa dữ liệu giữa
các table để tạo các quan hệ parent-child. DataSet được thiết
kế đặc biệt để giúp quản lý dữ liệu trong bộ nhớ và để hỗ trợ
các thao tác không cần kết nối (disconnected) trên dữ liệu.
DataSet là một đối tượng được dùng bởi tất cả Data
Provider, đó là lý do tại sao nó không có một Data Provider
prefix trong tên gọi.
07/09/2016
23
ÔN TẬPADO.NET
7. Lớp DataTable
DataView
DataRowView
DataColumn
DataRow
DataTable
07/09/2016
24
DataTable
•DataView
DataView dv=new DataView();
Thuộc tính của DataView
.Count : Trả về số records có trong the DataView
.RowFilter: Thiết lập hoặc trả về giá trị lọc theo 1 hàng bất
kỳ sẽ hiển thị trên DataView.
.Sort: Sắp xếp thứ tự của 1 cột hay nhiều cột trong
DataView.
07/09/2016
25
•DataView
DataView dv=new DataView()
Method of DataView
FindRows: Trả về 1 mảng đối tượng DataRowView mà
hàng đó sẽ tìm.
DataRowView[] drView;
dv.Sort=“FieldName”;
drView=dv.FindRows(value)
// Với value: FieldName
DataTable
07/09/2016
26
DataTable
•DataRowView
DataRowView drView=new DataRowView()
drView[i] or drView[“FieldNameColumn”] : giá trị trả về
String valueF;
valueF=drView[“StudentID”];
Or
valueF=drView[0];
07/09/2016
27
DataColumn: Trình bày lược đồ của một cột trong
một DataTable. Mỗi DataColumn có một thuộc
tính DataType để xác định kiểu dữ liệu được
lưu trữ trong DataColumn
DataColumn objColumn=new DataColumn(“ColumnName”);
DataTable dt=new DataTable();
Dt.Columns.Add(objColumn);
DataTable
07/09/2016
28
Đối tượng DataTable
Các thuộc tính- phương thức của DataTable
.Columns: trả về các cột trong Datatable
.Columns.Count: trả về số cột trong bảng
.Columns.Add(DataColumn): Thêm cột vào bảng
.Rows: trả về các dòng, mỗi dòng là một đối tượng
datarow
.Rows.Count: trả về số dòng trong bảng
.Rows.Add(DataRow): thêm một dòng vào bảng
07/09/2016
29
•DataTable: Là đối tượng để biểu diễn thông tin trong
Dataset.
ColName1 ColName2 . ColNameN
Data11 Data12 Data1N
DataM1 DataM2 . DataMN
DataColumn
DataRow
Đối tượng DataTable
07/09/2016
30
•DataTable
DataTable dt=new DataTable();
.Columns:Trả về tập hợp các columns có trong table
dt.
.Rows: Trả về tập hợp các rows có trong table dt.
dt.Columns
dt.Rows
Count
Add(objColumn)
Count
Add(objRow)
Đối tượng DataTable
07/09/2016
31
•DataTable
DefaultView: 1 đối ượng DataView (Dạng hiển thị khác của
DataTable)
DataTable dt=new DataTable();
Phương thức DataTable
NewRow():Tạo 1 dòng mới DataRow
DataRow dr;
dr=dt.NewRow();
Đối tượng DataTable
07/09/2016
32
ĐĂNG NHẬP
1. Kiểm tra kết nối: Nếu chuỗi cấu hình không tồn tại hoặc thông tin cấu hình
không phù hợp: thì hiển thì xử lý cấu hình (phần 2)
2. Kết nối thành công:
Tài khoản tồn tại:
Lấy thông tin: Tài khoản.
Thông báo nếu tài khoản bị khóa
Thông báo nếu tài khoản không tồn tại
07/09/2016
33
ĐĂNG NHẬP
1. Kiểm tra thông tin đăng nhập. (Nếu textbox Tên đăng nhập hoặc
Mật khẩu bỏ trống thì bắt nhập lại)
2. Kiểm tra chuỗi thông tin kết nối trong tập tin “App.config”.
• 0// Kết nối thành công chuỗi cấu hình hợp lệ
• 1// Chuỗi cấu hình không tồn tại
• 2// Chuỗi cấu hình không phù hợp.
3. Cấu hình chuỗi kết nối phù hợp Xử lý đăng nhập trường hợp 0.
• Kiểm tra sự tồn tại của Tên người dùng và mật khẩu
• Tên người dùng còn hoạt động hay không ?
4. Cấu hình chuỗi kết nối không phù hợp Xử lý tạo mới cấu hình nếu
là trường hợp 1,2
Quá trình xử lý thông tin đăng nhập cho một ứng dụng
07/09/2016
34
ĐĂNG NHẬP
35
2. Kiểm tra chuỗi thông tin kết nối trong tập tin “App.config”.
36
ĐĂNG NHẬP
Class QL_NguoiDung
public LoginResult Check_User(string pUser, string pPass)
{
SqlDataAdapter daUser = new SqlDataAdapter("select * from
QL_NguoiDung where TenDangNhap='" + pUser + "' and MatKhau ='" + pPass + "'",
Properties.Settings.Default.LTWNCConn);
DataTable dt = new DataTable();
daUser.Fill(dt);
if (dt.Rows.Count == 0)
return LoginResult.Invalid;// User không tồn tại
else if (dt.Rows[0][2] == null || dt.Rows[0][2].ToString() ==
"False")
{
return LoginResult.Disabled;// Không hoạt động
}
return LoginResult.Success;// Đăng nhập thành công
}
3. Cấu hình chuỗi kết nối phù hợp Xử lý đăng nhập trường hợp 0.
07/09/2016
37
3. Cấu hình chuỗi kết nối phù hợp Xử lý đăng nhập trường hợp 0.
0/08/2016
Form Đăng nhập
public void ProcessLogin()
{
LoginResult result;
result = CauHinh.Check_User(txtUsername.Text, txtPassword.Text);
// Wrong username or pass
if (result == LoginResult.Invalid)
{
MessageBox.Show("Sai " + lblUsername.Text + " Hoặc " + lblPassword.Text);
return;
}
// Account had been disabled
else if (result == LoginResult.Disabled)
{
MessageBox.Show("Tài khoản bị khóa");
return;
}
if (Program.mainForm == null || Program.mainForm.IsDisposed)
{
Program.mainForm = new frmMain();
}
this.Visible = false;
Program.mainForm.Show();
}
307/09/2016
38
ĐĂNG NHẬP
2 tiết
07/09/2016
39
ĐĂNG NHẬP
4. Cấu hình chuỗi kết nối không phù hợp Xử lý tạo mới
cấu hình nếu là trường hợp 1,2
FROM CẤU HÌNH
07/09/2016
40
CẤU HÌNH
Form cấu hình được mở nếu:
• 1// Chuỗi cấu hình không tồn tại
• 2// Chuỗi cấu hình không phù hợp
Cập nhật thông tin cấu hình: ServerName InstanceNam
• Quyền windows: lưu server và database
• Quyền Sql: Lưu server, database, uid và pwd
07/09/2016
41
CẤU HÌNH
1. Tìm kiếm Server Name
2. Nhập User Sql
3. Nhập Password tương ứng bước 2
4. Tìm kiếm Database tương ứng với các thông tin hợp
lệ trên
5. Tất cả hợp lệ lưu lại chuỗi cấu hình.
07/09/2016
42
1. Tìm kiếm Server Name
07/09/2016
43
1. Tìm kiếm Server Name
07/09/2016
44
CẤU HÌNH
2. Nhập User Sql
3. Nhập Password tương ứng bước 2
07/09/2016
45
CẤU HÌNH
4. Tìm kiếm Database tương ứng với các thông tin hợp lệ trên.
07/09/2016
46
CẤU HÌNH
07/09/2016
47
CẤU HÌNH
5. Tất cả hợp lệ lưu lại chuỗi cấu hình.
private void button1_Click(object sender, EventArgs e)
{
CauHinh.ChangeConnectionString( cboServer.Text,
cboDataBase.Text, txtUsername.Text, txtPassword.Text);
this.Close();
}
07/09/2016
48
CẤU HÌNH
5. Tất cả hợp lệ lưu lại chuỗi cấu hình.
public void ChangeConnectionString(string pServerName, string
pDataBase, string pUser, string pPass)
{
Demo1.Properties.Settings.Default.LTWNCConn = "Data
Source=" + pServerName + ";Initial Catalog=" +
pDataBase + ";User ID=" + pUser + ";pwd = " + pPass +
"";
Properties.Settings.Default.Save();
}
07/09/2016
49
CẤU HÌNH
Các trường hợp ngoại lệ có thể xảy ra
1. Chuỗi cấu hình lưu vào thư mục tạm trên máy không
thay đổi trong fileApp.config.
2. Người dùng có thể tìm kiếm và nhận biết chuỗi cấu hình.
07/09/2016
50
ĐỔI MẬT KHẨU
Chức năng con của chức năng “Hệ thống”
Cho phép account thay đổi mật khẩu của mình
Có mấy trường hợp có thể đổi mật khẩu?????
07/09/2016
51
ĐỔI MẬT KHẨU
1. Người dùng tự thay đổi mật khẩu
2. Quản trị reset mật khẩu cho người dùng (quên mật khẩu)
07/09/2016
52
ĐỔI MẬT KHẨU
1. Giao diện gợi ý Người dùng tự thay đổi mật khẩu
07/09/2016
53
ĐỔI MẬT KHẨU
1. Giao diện gợi ý Quản trị reset mật khẩu cho người dùng (quên mật
khẩu)
07/09/2016
54
MẬT KHẨU
Mật khẩu có an toàn???
07/09/2016
55
MÃ HÓA MẬT KHẨU
07/09/2016
56
GIẢI MÃ MẬT KHẨU
07/09/2016
57
NỘI DUNG TUẦN SAU
Báo cáo công cụ QUẢN LÝ SOURCE CODE BẰNG TEAM
FOUNDATION SEVER: 1 nhóm.
Báo cáo côngcụ QUẢN LÝ SOURCE CODE BẰNG
tortoise svn: 1 nhóm.
Báo cáo công cụ QUẢN LÝ SOURCE CODE BẰNG Visual
Source Safe: 1 nhóm.
Nộp slide, code, 12h00 ngày thứ hai.
07/09/2016