ADO.NET là công nghệ truy xuất dữ liệu có cấu trúc, cung cấp giao diện hướng đối tượng hợp nhất (Uniform object oriented) cho các dữ liệu khác nhau
Cơ sở dữ liệu quan hệ
XML
Các dữ liệu khác
Được thiết kế cho các ứng dụng phân tán và Web
37 trang |
Chia sẻ: lylyngoc | Lượt xem: 1564 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Lập trình hướng đối tượng 2 - Kết nối cơ sở dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 2 KẾT NỐI CƠ SỞ DỮ LIỆU Lịch sử phát triển Lịch sử phát triển Kiến trúc ADO.NET ADO.NET là công nghệ truy xuất dữ liệu có cấu trúc, cung cấp giao diện hướng đối tượng hợp nhất (Uniform object oriented) cho các dữ liệu khác nhau Cơ sở dữ liệu quan hệ XML Các dữ liệu khác Được thiết kế cho các ứng dụng phân tán và Web ADO.NET ADO.NET = ActiveX Data Objects Các đối tượng ADO.NET chứa trong không gian tên System.Data. Các đối tượng ADO.NET chia thành 2 loại: Connected: Các đối tượng kết nối trực tiếp với cơ sở dữ liệu. Disconnected: Các đối tượng không kết nối trực tiếp với cơ sở dữ liệu. ADO.NET ADO.NET Kiến trúc ADO.NET ADO.NET Data Providers Là các lớp truy xuất dữ liệu nguồn Microsoft SQL Server Oracle Microsoft Access Thiết lập kết nối giữa DataSets và dữ liệu nguồn Có 2 thư viện ADO.NET Data Providers System.Data.OleDb: Dùng truy xuất cơ sở dữ liệu OLE System.Data.SqlClient: Truy xuất SQL Server Data Providers ADO.NET Data Providers Data Providers 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. Connection Chuỗi kết nối bao gồm: Tên Server: tên_máy_hay_IP[\tênSqlServer] Tên dữ liệu: tên_dữ_liệu_trong_SQLServer Tên người đăng nhập: tên_login_trong_SQLServer Mật khẩu đăng nhập Ví dụ: “server = localhost; database = QLBH; uid=sa; pwd = 123456” Hoặc dùng “Data Source=myServerAddress;Initial Catalog = myDataBase; User Id = myUsername; Password = myPassword; ” Connection 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. SqlConnection cnn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); cnn.ConnectionString = “server=localhost; database=QLBH; user id=sa; password=123456”; cmd.Connection = cnn; cmd.CommandText = “SELECT COUNT(*) FROM HoaDon”; cmd.CommandType = CommandType.Text; cnn.Open(); int count = (int)cmd.ExecuteScalar(); cnn.Close(); Command SqlConnection cnn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); cnn.ConnectionString = “server=localhost; database = QLBH; user id=sa; password=123456”; cmd.Connection = cnn; cmd.CommandText = “INSERT INTO LoaiSanPham(MaLoai, TenLoai)” + “VALUES(1, “Quần áo”)”; cmd.CommandType = CommandType.Text; cnn.Open(); cmd.ExecuteNonQuery(); cnn.Close(); Command SqlConnection cnn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); cnn.ConnectionString = “server=localhost; database = QLBH; user id=sa; password=123456”; cmd.Connection = cnn; cmd.CommandText =“Select MaSP, TenSP From SanPham”; cmd.CommandType = CommandType.Text; cnn.Open(); SqlDataReader reader= cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine(“San pham: {0} – {1}”, reader.getString(0), reader.getString(1)); } cnn.Close(); Command Command - 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: @[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. Command - Parameter Tham số hóa: cmd.CommandText = “SELECT * FROM SanPham WHERE TenSP= @ten”; cmd.CommandText = “INSERT INTO SanPham(MaSP, TenSP, SoLuong) VALUES(@ma, @ten, @soluong)”; Command - Parameter Tạo các parameter cho Command: cmd.Parameters.Add(“@ma”, SqlDbType.Int); cmd.Parameters.Add(“@ten”, SqlDbType.NVarChar); cmd.Parameters.Add(“@soluong”,SqlDbType.Float); Command - Parameter Đặt giá trị cho các parameter: foreach (SanPham sp in list) { cmd.Parameters[“@ma”] = sp.MaSP; cmd.Parameters[“@ten”] = sp.TenSP; cmd.Parameters[“@soluong”] = sp.SoLuong; cmd.ExecuteNonQuery(); } Dùng để lấy dữ liệu từ dữ liệu nguồn vào DataSet và để cập nhật dữ liệu từ DataSet vào dữ liệu nguồn OleDbDataAdapter làm việc với CSDL MS Access SqlDataAdapter làm việc với dữ liệu SQL Server DataAdapter 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. DataAdapter SqlConnection cnn = new SqlConnection( “server=localhost;database=QLBH;uid=sa;pwd=123”); cnn.Open(); SqlCommand cmd = new SqlCommand( “Select MaSP, TenSP from SanPham”, cnn); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds, “sp” ); cnn.Close(); DataAdapter 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 DataSet DataSet 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. DataTable 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. DataColumn 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. DataRow DataTable table = new DataTable(“SanPham”); table.Columns.Add(new DataColumn(“MaSP”, Type.GetType(“string”)); table.Columns.Add(new DataColumn(“TenSP”, Type.GetType(“string”)); table.PrimaryKey = new DataColumn[] { table.Columns[“MaSP”] }; DataRow row = table.NewRow(); row[“MaSP”] = “123”; row[“TenSP”] = “Mì ăn liền Hảo Hảo”; table.Rows.Add(row); DataTable SqlDataAdapter da = new SqlDataAdapter( “SELECT * FROM SanPham”, “server=localhost; database=QLBH; user id=sa; password=123456”); SqlCommandBuilder sqlcombd = new SqlCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow row in ds.Tables[0].Rows) row[“TenSP”] = “Mì ăn liền Aone”; da.Update(ds); DataTable SqlDataAdapter da = new SqlDataAdapter( “SELECT * FROM SanPham”, “server=localhost; database=QLBH; user id=sa; password=123456”); SqlCommandBuilder sqlcombd = new SqlCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow row in ds.Tables[0].Rows) if (row[“MaSP”] == “245”) row.Delete(); da.Update(ds); DataTable DataGirdView: Thể hiện bảng dữ liệu DataSource: Chỉ nơi cung cấp dữliệu (là DataSet hay DataTable, hay DataView). DataMember: Xác định cụ thể thành phần bên trong DataSource dùng cho thể hiện. DataGridView DataSet ds = new DataSet(); SqlConnection cnn = new SqlConnection(“server…”); cnn.Open(); SqlCommand cmd = new SqlCommand( "select * from SanPham", cnn); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = scmd; da.Fill(ds, “sp"); cnn.Close(); dataGridView1.DataSource = ds; dataGridView1.DataMember = “sp"; DataGridView ComboBox: Thể hiện 1 trường dữ liệu cho lựa chọn DataSource: Chỉ nơi cung cấp dữ liệu DisplayMember: Chỉ trường thể hiện dữ liệu trên ComboBox. ValueMember: Chỉ trường dữ liệu mà sẽ cho ra giá trị khi người dùng lựa chọn trên combobox. ComboBox SqlConnection cnn = new SqlConnection(“server..”); cnn.Open(); SqlCommand cmd = new SqlCommand( "select * from LoaiSanPham", cnn); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; da.Fill(ds, “loai"); cnn.Close(); comboBox1.DataSource = ds; comboBox1.DisplayMember = “loai.TenLoai"; comboBox1.ValueMember = "loai.MaLoai"; ComboBox