Tài liệu Công nghệ Ado.net
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu Công nghệ Ado.net", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- tai_lieu_cong_nghe_ado_net.pdf
Nội dung text: Tài liệu Công nghệ Ado.net
- Giới thiệu công nghệ ADO.NET
- Sơ lược lịch sử phát triển Native API DB API DB API DB API Application Database Open DataBase Connectivity DB API Driver DB API ODBC API ODBC Driver DB API Driver Application Database 2
- Sơ lược lịch sử phát triển OLEDB và ADO Provider Provider ADO Non-Relational Data OLE DB Provider Provider Application Driver ODBC Driver Driver Relational Data 3
- Kiến trúc ADO.NET ADO.NET .NET Data Provider SQL Server Oracle OLE DB OLE DB Relational Data Application ADO.NET ODBC ODBC Non-Relational Data 4
- Kiến trúc ADO.NET 5
- Kiến trúc ADO.NET Cây phân cấp các đối tượng trong ADO.NET 6
- Kiến trúc ADO.NET Connected objects: là những đối tượng giao tiếp trực tiếp với CSDL. Disconnected objects: cho phép các user làm việc với dữ liệu dạng offline (khi đã đóng kết nối cơ sở dữ liệu) 7
- Các thư viện truy xuất CSDL trong ADO.NET System.Data.OleDb: Access, SQL Server, Oracle System.Data.SqlClient: SQL Server System.Data.OracleClient: Oracle Ghi chú: Về mặt giao tiếp lập trình ứng dụng, cả 3 thư viện trên không khác biệt nhau nhiều. Dùng thư viện System.Data.SqlClient sẽ truy xuất SQL Server nhanh hơn System.Data.OleDb Dùng thư viện System.Data.OracleClient sẽ truy xuất Oracle nhanh hơn System.Data.OleDb 8
- .NET Data Provider .NET Data Provider XXXConnection XXXCommand XXXDataReader Data Source DataSet XXXDataAdapter (CSDL) XXXParameter XXXTransaction Ví dụ: OleDbConnection, SqlConnection, OracleConnection 9
- .NET Data Provider – Connection Connection Application Data Source Các đối tượng Connection tuân thủ IDbConnection interface. ConnectionString: loại Data Source cần kết nối. Open(): thiết lập kết nối đến Data Source. Close(): ngắt kết nối đến Data Source. 10
- .NET Data Provider – Connection (tt) IDbConnection cnn = new SqlConnection(“server=localhost; database=Northwind; user id=sa; password=sa”); cnn.Open(); // Does something here. cnn.Close(); 11
- .NET Data Provider - Command 011010011 Connection 011010011 Application Data Source Command 12
- .NET Data Provider – xxxCommand Các thuộc tính, phương thức thông dụng: Connection: kết nối dùng để thực hiện câu lệnh. CommandText: câu lệnh cần thực hiện trên Data Source. CommandType: loại câu lệnh trong CommandText (Text, TableDirect, StoredProc). ExecuteScalar(): thực hiện câu lệnh trong CommandText, kết quả trả về là một giá trị đơn. ExecuteNonQuery(): thực hiện câu lệnh trong CommandText và không có kết quả trả về. ExecuteReader(): thực hiện câu lệnh trong CommandText, kết quả trả về là một DataReader. 13
- .NET Data Provider – xxxCommand (tt) IDbConnection cnn = new SqlConnection(“server=localhost; database=Northwind; user id=sa; password=sa”); IDbCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = “SELECT COUNT(*) FROM Orders”; cmd.CommandType = CommandType.Text; cnn.Open(); int count = (int)cmd.executeScalar(); cnn.Close(); 14
- .NET Data Provider – xxxCommand (tt) IDbConnection cnn = new SqlConnection(“server=localhost; database=QLHS; user id=sa; password=sa”); IDbCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = “INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb) VALUES(5, „Nguyễn Văn A‟, 8.5)”; cmd.CommandType = CommandType.Text; cnn.Open(); cmd.executeNonQuery(); cnn.Close(); 15
- .NET Data Provider - Parameter Mục đích sử dụng: Một vài giá trị trong câu lệnh chỉ biết khi thực hiện câu lệnh. Cần thực hiện câu lệnh nhiều lần với các giá trị khác nhau. Các bước thực hiện: Tham số hóa câu lệnh: ? hoặc @[tên tham số] Tạo các parameters tương ứng cho command. Đặt giá trị cho các parameter mỗi khi dùng command thực hiện câu lệnh. 16
- .NET Data Provider – Parameter(tt) Tham số hóa SQL Data Provider: cmd.CommandText = “SELECT * FROM HocSinh WHERE tenhocsinh = @ten”; cmd.CommandText = “INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb)” + “VALUES(@id, @ten, @dtb)”; Các provider khác: cmd.CommandText = “SELECT * FROM HocSinh WHERE tenhocsinh = ?”; cmd.CommandText = “INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb)” + “VALUES(?, ?, ?)”; 17
- .NET Data Provider – Parameter(tt) Tạo các parameter cmd.Parameters.Add(“@id”, 5); cmd.Parameters.Add(“@ten”, “Nguyễn Văn A”); cmd.Parameters.Add(“@dtb”, 8.5); Đặt giá trị cho các parameter foreach (Student s in studentList) { cmd.Parameters[“@id”] = i; cmd.Parameters[“@ten”] = s.studentName; cmd.Parameters[“@dtb”] = s.studentMarks; cmd.ExecuteNonQuery(); } 18
- .NET Data Provider – DataReader Read()ExecuteReader() DataReader Connection 011010011011010011 Application Data Source Command BookID BookName Author i Book i Author i 19
- .NET Data Provider – DataReader Các đối tượng DataReader tuân thủ interface IDataReader. HasRow: cho biết còn dữ liệu để đọc nữa không. Read(): đọc một mẫu tin vào DataReader. Toán tử [ i ]: truy xuất đến cột i trong mẫu tin đọc được. Close(): đóng DataReader. Lưu ý: Truy xuất tuần tự và không quay lui. Không cập nhật dữ liệu. Cơ chế kết nối. 20
- .NET Data Provider – DataReader SqlConnection cnn = new SqlConnection(“server=localhost; database=Northwind; user id=sa; password=sa”); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = “select * from Orders”; cmd.CommandType = CommandType.Text; cnn.Open(); IDataReader dr = cmd.executeReader(); while (dr.Read()) MessageBox.Show(dr[“CustomerID”].ToString()); dr.Close(); cnn.Close(); 21
- .NET Data Provider - DataAdapter DataAdapter SelectCommand InsertCommand DataSet UpdateCommand Data Source DeleteCommand Các đối tượng DataAdapter tuân thủ interface IDbDataAdapter. Fill(DataSet): dùng SelectCommand lấy dữ liệu từ Data Source đổ vào DataSet. Update(DataSet): dùng InsertCommand, UpdateCommand và DeleteCommand cập nhật dữ liệu trong DataSet vào Data Source. 22
- .NET Data Provider - DataAdapter SqlConnection cnn = new SqlConnection(“server=localhost; database=Northwind; user id=sa; password=sa”); SqlDataAdapter da = new SqlDataAdapter(“select * from Orders”, cnn) DataSet ds = new DataSet(); da.Fill(ds); // Does something on the DataSet. da.Update(ds); 23
- DataSet DataSet là gì? DataSet Data Source Có thể nói DataSet là cơ sở dữ liệu được lưu trữ trong bộ nhớ chính (in-memory database). Cơ chế không kết nối 24
- DataSet DataSet Tables DataTable Columns DataColumn Rows DataRow Relations DataRelation 25
- DataSet - DataTable DataTable thể hiện một bảng trong cơ sở dữ liệu. Các thuộc tính và phương thức: TableName: tên bảng. Columns: danh sách các cột (DataColumn). Rows: danh sách các mẫu tin (DataRow). PrimaryKey: danh sách các cột làm khóa chính (DataColumn). NewRow(): tạo một mẫu tin mới. 26
- DataSet - DataColumn DataColumn thể hiện một cột trong bảng. Các thuộc tính và phương thức: ColumnName: tên cột. DataType: kiểu dữ liệu cột. 27
- DataSet - DataRow DataRow: thể hiện một mẫu tin trong bảng. Các thuộc tính và phương thức: RowState: trạng thái của mẫu tin (Added, Modified, Deleted, Unchanged, Detach). Toán tử [ i ]: truy xuất đến cột i của mẫu tin. Delete(): đánh dấu xóa mẫu tin. 28
- Các bước thao tác CSDL Bước 1: Tạo chuỗi kết nối cnStr Bước 2: Kết nối CSDL với đối tượng XXXConnection Bước 3: Tạo chuỗi strSQL thao tác CSDL Bước 4: Thực thi chuỗi strSQL với đối tượng XXXCommand hoặc XXXDataAdapter Bước 5: Đóng kết nối 29
- Các phương thức thông dụng 1. LayDanhSach (kết quả trả về là một ArrayList) 2. LayBang (kết quả trả về là DataTable) 3. CapNhatBang 4. TimKiem (đối tượng theo mã) 5. Them (1 đối tượng) 6. Xoa (đối tượng theo mã) 7. Sua (1 đối tượng) 8. 30
- Bước 1: Tạo chuỗi kết nối CSharp: Kết nối với CSDL Access: String cnStr = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = DeAnCongTy.mdb"; Kết nối với CSDL SQL Server: String cnStr = "Provider = Server=localhost; database=Northwind; user id=sa; password=sa"; 31
- Bước 1: Tạo chuỗi kết nối Lưu ý: khi kết nối với CSDL Access, nếu không chỉ ra đường dẫn tuyệt đối đến tập tin CSDL thì tập tin CSDL phải nằm cùng với thư mục chứa tập tin thực thi (.exe) Còn nhiều dạng câu kết nối, như với Oracle, kết nối qua đường mạng, kết nối có bảo mật, . SV có thể tìm kiếm thêm trên Google qua các tổ hợp từ khóa: connection, string, CSharp, VB, NET, 2005, 32
- Bước 2: Mở kết nối với XXXConnection CSharp: OleDbConnection cn = new OleDbConnection(cnStr); cn.Open(); 33
- Bước 3: Tạo chuỗi strSQL thao tác CSDL CSharp: String strSQL = "Select * From NhanVien"; Ghi chú: Trong những câu SQL phức tạp có thể sẽ phải cộng thêm chuỗi hoặc thêm parameter 34
- Bước 4: Thực thi chuỗi strSQL với XXXDataAdapter CSharp: DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(strSQL, cn); da.Fill(dt); 35
- Bước 4: Thực thi chuỗi strSQL với XXXCommand CSharp: SqlCommand cmd = new SqlCommand(strSQL, cn); SqlDataReader dr = cmd.ExecuteReader(); Ghi chú: Với những câu SQL phức tạp có thể phải khởi tạo các giá trị của các parameter trước khi thực thi chuỗi strSQL 36
- Bước 5: Đóng kết nối CSharp: cn.Close(); Thảo luận: Có cần thiết phải mở/đóng kết nối với mỗi lần thao tác với CSDL? Chỉ mở/đóng 1 lần vào đầu/cuối chương trình? SV tự tìm hiểu Connection Pool 37