.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.. .NET Data Provider - CommandConnection: kết nối dùng để thực
Trang 1Thiết kế và Lập trình Web 2
Thao tác CSDL với ADO.NET
Trường Đại học Khoa học Tự nhiên
Trang 4ADO.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
Trang 5Sơ lược lịch sử phát triển
ODBC
Driver Driver Driver Application
Trang 6Provider Provider Provider Provider
Trang 8ODBC OLE DB
.NET Data Provider
ADO.NET
Trang 9Kiến trúc ADO.NET (cont)
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
Trang 11.NET Data Provider
.NET Data Provider
Parameters ???Parameter
Trang 12.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 Source Application
Connection
Trang 13.NET Data Provider – Connection (cont)
SqlConnection cnn = new SqlConnection();
Trang 14Connection string (Access, SQL Server,…)
Tạo connection string
Database ODBC/OLEDB Connection String
Trang 15Đườ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
Trang 16.NET Data Provider - Command
Data Source Application
Connection 011010011
011010011
Command
Trang 17.NET Data Provider - 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
Trang 18.NET Data Provider – Command (cont)SqlConnection cnn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
Trang 19.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();
Trang 20.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
Trang 21.NET Data Provider – Parameter (cont)
Trang 22.NET Data Provider – Parameter (cont)
Tạo các parameter cho Command:
Trang 23.NET Data Provider – Parameter (cont)
foreach (Student s in studentList)
{
cmd.Parameters[“@id”] = i;
cmd.Parameters[“@ten”] = s.studentName; cmd.Parameters[“@dtb”] = s.studentMarks; cmd.ExecuteNonQuery();
}
Trang 24.NET Data Provider – DataReader
Data Source Application
011010011
Trang 25.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
Trang 26.NET Data Provider – DataReader (cont)
SqlConnection cnn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
cnn.ConnectionString = “server=localhost; database=Northwind; user id=sa; password=sa”);
Trang 27.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
Trang 28.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.
Trang 32DataSet - 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
Trang 34Toán tử [ i ]: truy xuất đến cột i của mẫu tin.
Delete(): đánh dấu xóa mẫu tin
Trang 35DataSet (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);
Trang 36DataSet (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);
Trang 37DataSet (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);
Trang 38DataSet (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