Bài giảng Lập trình Windows Nâng cao - Buổi 3 - Bùi Công Danh

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.

pdf57 trang | Chia sẻ: candy98 | Lượt xem: 529 | Lượt tải: 0download
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
Tài liệu liên quan