Thiết kế và lập trình Web 2 - Thao tác CSDL với ADO.NET

Nội dung  Sơ lược lịch sử phát triển  Kiến trúc ADO.NET  .NET Data Provider  DataSet

pdf38 trang | Chia sẻ: franklove | Lượt xem: 1841 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Thiết kế và lập trình Web 2 - Thao tác CSDL với ADO.NET, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Bài giảng môn học © 2007 Khoa Công nghệ thông tin Thiết kế và Lập trình Web 2 Thao tác CSDL với ADO.NET Khoa Công nghệ Thông tin Trường Đại học Khoa học Tự nhiên Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN2 Nội dung  Sơ lược lịch sử phát triển  Kiến trúc ADO.NET  .NET Data Provider  DataSet Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN3 Nội dung Sơ lược lịch sử phát triển  Kiến trúc ADO.NET  .NET Data Provider  DataSet Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN ADO.NET là gì?  ADO.NET (ActiveX Data Object .NET) – Công nghệ của Microsoft – Phát triển tự nhiên từ ADO – Cung cấp các đối tượng và hàm thư viện dùng để kết nối và xử lý trên CSDL Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN5 Sơ lược lịch sử phát triển ODBC Driver Driver Driver Application Application Database Database DB API DB API DB API ODBC API DB API DB API DB API  Native API  Open DataBase Connectivity Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN6 ADO OLE DB Sơ lược lịch sử phát triển (cont) Application Non-Relational Data Relational Data  OLEDB và ADO ODBC Driver Driver Driver Provider Provider Provider Provider Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN7 Nội dung  Sơ lược lịch sử phát triển Kiến trúc ADO.NET  .NET Data Provider  DataSet Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN8 ADO.NET ODBC Kiến trúc ADO.NET Application Non-Relational Data Relational DataOLE DB Oracle SQL Server ODBC OLE DB .NET Data Provider ADO.NET Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN9 Kiến trúc ADO.NET (cont) ???Connection ???DataAdapter ???Command ???DataReader .NET Data Provider Data Source DataSet XML Cơ chế kết nối (Connected) Cơ chế không kết nối (Disconnected)  Các hệ quản trị CSDL hạn chế số lượng kết nối.  Duy trì quá nhiều kết nối làm cho server quá tải. Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN10 Nội dung  Sơ lược lịch sử phát triển  Kiến trúc ADO.NET .NET Data Provider  DataSet Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN11 .NET Data Provider .NET Data Provider ???Connection ???Transaction ???Command ???DataReader ???DataAdapter SelectCommand DeleteCommand UpdateCommand InsertCommand Parameters ???Parameter Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN12 .NET Data Provider - Connection  Thuộc tính và phương thức của Connection: 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. Data SourceApplication Connection Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN13 .NET Data Provider – Connection (cont) SqlConnection cnn = new SqlConnection(); cnn.ConnectionString = “server=localhost; database=Northwind; user id=sa; password=sa”; cnn.Open(); // Does something here. cnn.Close(); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN Connection string (Access, SQL Server,…)  Tạo connection string Database ODBC/OLEDB Connection String Microsoft Access Driver={Microsoft Access Driver (*.mdb)}; DBQ=ĐườngDẫnFileAccess Hoặc Provider=Microsoft.Jet.OLEDB.4.0; Data Source=ĐườngDẫnFileAccess Microsoft SQL Driver={SQLServer}; Server=ServerName; Database=DatabaseName; Uid=Username; Pwd=Password; Hoặc Provider=SQLOLEDB;Data Source=ServerName; Initial Catalog=DatabaseName; UserId=Username; Password=Password; String strConn = string.Format(“Driver={Microsoft Access Driver (*.mdb)}; DBQ={0}”, Server.MapPath(“database\mydb.mdb”)); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN Đường dẫn tới tập tin Access  Server.MapPath(StringPath) – ánh xạ đường dẫn tương đối StringPath thành đường dẫn đến thư mục vật lý trên Server – Ví dụ: Giả sử tập tin asp sử dụng hàm Server.MapPath được lưu tại D:\MyWebsite Kết quả Server.MapPath(“myDB.mdb”); D:\MyWebsite\myDB.mdb Server.MapPath(“Database/myDB.mdb”); D:\MyWebsite\Database\myDB.mdb Server.MapPath(“../myDB.mdb”); D:\myDB.mdb Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN16 .NET Data Provider - Command Data SourceApplication Connection 011010011011010011 Command Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN17 .NET Data Provider - Command  Thuộc tính và phương thức của Command: 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. Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN18 .NET Data Provider – Command (cont) SqlConnection cnn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); cnn.ConnectionString = “server=localhost; database=Northwind; user id=sa; password=sa”; cmd.Connection = cnn; cmd.CommandText = “SELECT COUNT(*) FROM Orders”; cmd.CommandType = CommandType.Text; cnn.Open(); int count = (int)cmd.ExecuteScalar(); cnn.Close(); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN19 .NET Data Provider – Command (cont) SqlConnection cnn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); cnn.ConnectionString = “server=localhost; database=QLHS; user id=sa; password=sa”; 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(); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN20 .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. Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN21 .NET Data Provider – Parameter (cont)  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(?, ?, ?)”; Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN22 .NET Data Provider – Parameter (cont)  Tạo các parameter cho Command: Sql Data Provider: cmd.Parameters.Add(“@id”, SqlDbType.Int); cmd.Parameters.Add(“@ten”, SqlDbType.NVarChar); cmd.Parameters.Add(“@dtb”, SqlDbType.Float); OleDb Data Provider: cmd.Parameters.Add(“@id”, OleDbType.Integer); cmd.Parameters.Add(“@ten”, OleDbType.VarWChar); cmd.Parameters.Add(“@dtb”, OleDbType.Numeric); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN23 .NET Data Provider – Parameter (cont) Đặ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(); } Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN 24 .NET Data Provider – DataReader Data SourceApplication Connection Command BookID BookName Author i Book i Author i DataReader ExecuteReader()Read() 011010011011010011 Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN25 .NET Data Provider - DataReader  Thuộc tính và phương thức của DataReader: HasRow: cho biết câu truy vấn có trả về dữ liệu? 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. Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN26 .NET Data Provider – DataReader (cont) SqlConnection cnn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); cnn.ConnectionString = “server=localhost; database=Northwind; user id=sa; password=sa”); 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(); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN27 .NET Data Provider - DataAdapter SelectCommand UpdateCommand InsertCommand DeleteCommand DataAdapter Data Source DataSet  Thuộc tính và phương thức của DataAdapter: 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. Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN28 .NET Data Provider – DataAdapter (cont) SqlDataAdapter da = new SqlDataAdapter( “SELECT * FROM Orders”, “server=localhost; database=Northwind; user id=sa; password=sa”); DataSet ds = new DataSet(); da.Fill(ds); // Does something on the DataSet. da.Update(ds); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN29 Nội dung  Sơ lược lịch sử phát triển  Kiến trúc ADO.NET  .NET Data Provider DataSet Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN30 DataSet  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. Data Source DataSet  DataSet là gì? Ánh xạ Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN31 DataSet DataTable DataSet (cont) Columns Rows DataColumn DataRow Tables Relations DataRelation Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN32 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. Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN33 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. Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN34 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. Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN35 DataSet (cont) DataTable table = new DataTable(“SinhVien”); table.Columns.Add(new DataColumn(“MSSV”, Type.GetType(“Int32”)); table.Columns.Add(new DataColumn(“HoTen”, Type.GetType(“string”)); table.PrimaryKey = new DataColumn[] { table.Columns[“MSSV”] }; DataRow row = table.NewRow(); row[“MSSV”] = 123; row[“HoTen”] = “Nguyễn Văn A”; table.Rows.Add(row); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN36 DataSet (cont) SqlDataAdapter da = new SqlDataAdapter( “SELECT * FROM Orders”, “server=localhost; database=Northwind; user id=sa; password=sa”); DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow row in ds.Tables[0].Rows) row[“OrderDate”] = DateTime.Now; da.Update(ds); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN37 DataSet (cont) SqlDataAdapter da = new SqlDataAdapter( “SELECT * FROM Orders”, “server=localhost; database=Northwind; user id=sa; password=sa”); DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow row in ds.Tables[0].Rows) if (row[“CustomerID”].ToString() == “Nguyễn Văn A”) row.Delete(); da.Update(ds); Thiết kế và Lập trình Web 2 – Thao tác CSDL với ADO.NET © 2007 Khoa CNTT - ĐHKHTN38 DataSet (cont)  So sánh DataSet và DataReader: Tốc độ truy xuất. Bô nhớ lưu trữ. Thuận tiện trong thao tác. Cơ chế kết nối và không kết nối.