DataAdapter chỉ thao tác với một nguồn dữ liệu qua một đối tượng connection đang kết nối, khi Connection chưa mở thì DataAdapter sẽ tự động mở kết nối khi cần và đóng lại.[r]
Trang 1Chương 6:
Giảng Viên: ThS Dương Thành Phết
Email: phetcm@gmail.com – YahooID: phetcm
Website: http://www.thayphet.net
Tel: 0918158670
Trang 2NỘI DUNG
1 Đối tượng Connection
2 Đối tượng Command
3 Đối tượng DataReadder
4 Đối tượng Dataset
5 Đối tượng DataAdapter
6 Giao tiếp CSDL theo mô hình 1 lớp
7 Giao tiếp CSDL theo mô hình 1 lớp
Trang 3 Vai trò của Connection trong ADO.net là tạo kết nối giữa ứng dụng với CSDL
Khi cthực hiện kết nối cần xác định các thông tin cho Connection thông qua thuộc tính Connection String Tùy thuoc vào Data Provider
Với SQLServer
• Server name
• Database name
• User name
• Password
Với Access
• Database name
• User name
• Password
Trang 4 Thuộc tính
ConnectionString: Chuỗi kết nối DataSource
State: Tình trạng kết nối: Connecting (đang kêt nối), Open (đã kêt nối), Broken (kết nối bị ngắt khi
đã kết nối), Closed (kết nối đã đóng)
Phương thức
Open(): Thiết lập kết nối đến DS
Close(): Đóng kết nối với DS
1 ĐỐI TƯỢNG CONNECTION
Trang 5Các bước tạo kết nối
Bước 1: Khởi tạo đối tượng Connection với tham số connection string đối với database tương ứng
Bước 2: Thiết lập kết nối đến database bằng phương thức Open
Bước 3: Thực hiện các thao tác khai thác dữ liệu (select, insert, delete, update) từ database
Bước 4: đóng kết nối đến database bằng phương thức Close
Trang 6using System.Data.SqlClient;
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString =
server =localhost ; database =Northwind ; uid =sa; pwd =sa"; cnn.Open(); //Mở kết nối
//xử lý trong quá trình kết nối
…
cnn.Close(); //Đóng két nối
1 ĐỐI TƯỢNG CONNECTION
Sử dụng tên miền: System.Data.SqlClient;
Server: Chỉ định tên máy chứa Database
Database: Chỉ định tên cơ sở dữ liệu
Uid: Tên tài khỏan đăng nhập SQLServer (nếu có)
Pwd: Mật khẩu đăng nhập (nếu có)
Tạo kết nối với SQLServer (cách 1)
Trang 7using System.Data.SqlClient;
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = “ Data Source =localhost;
Initial Catalog =Northwind; UserId =sa; Password =sa” cnn.Open(); //Mở kết nối
//xử lý trong quá trình kết nối
…
cnn.Close(); //Đóng két nối
DataSource: Chỉ định tên máy chứa Database
Initial Catalog: Chỉ định tên cơ sở dữ liệu
Userid: Tên tài khỏan đăng nhập SQLServer (nếu có)
Password: Mật khẩu đăng nhập (nếu có)
Tạo kết nối với SQLServer (cách 2)
Trang 8using System.Data.OleDb;
OleDBConnection cnn = new OleDbSqlConnection();
cnn.ConnectionString = “Provider = Microsoft.Jet.OLEDB.4.0;
Data Source=QLHOCSINH.MDB"; cnn.Open();
//xử lý trong quá trình kết nối
cnn.Close();
Tạo kết nối với MS Access
Đối với MS Access 2007/2010 thì Provider=Microsoft.ACE.OLEDB.12.0
1 ĐỐI TƯỢNG CONNECTION
Trang 9Minh họa:
using System.Data.SqlClient;
SqlConnection cnn = new SqlConnection();
private void btLogin_Click(object sender, EventArgs e)
{
String Tenmay = txtServername.Text;
String TenDN = txtUsername.Text;
String Matkhau = txtPassword.Text;
String TenCSDL = txtDatabasename.Text;
cnn.ConnectionString = "Server=" + Tenmay + "; Database=" + TenCSDL + " ;
User Id=" + TenDN + "; Password= " + Matkhau;
try
{
cnn.Open();
MessageBox.Show("Kết nối thành công", "Thông báo");
cnn.Close();
}
catch
{
MessageBox.Show("Kết nối thất bại", "Thông báo");
}
Trang 102 ĐỐI TƯỢNG COMMAND
Quá trình tương tác với database cần phải biết hành động nào muốn xảy ra Điều này được thực hiện bởi đối tượng command
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
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 cho một SqlDataAdapter
Trang 11 Thuộc tính:
Connection:Kết nối để thực hiện lệnh
CommandText:Câu lệnh cần thực hiện
CommandType:Loại câu lệnh (Text, TableDirect, StoredProc)
ExecuteScalar(): Thực hiện lệnh và trả về giá trị đơn
ExecuteNonQuery(): Gọi các lệnh SQL, store, trả về số row bị tác động (Insert, Update, Delete…)
ExecuteReader():Thực hiện lệnh và trả về DataReader
Trang 12SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = “ Data Source =localhost;
Initial Catalog =QLsinhvien; User Id =sa; Password =sa” cnn.Open(); //Mở kết nối
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText =
“Select Count(*) From TableName”; int n = (int) cmd.ExecuteScalar();
cnn.Close();
2 ĐỐI TƯỢNG COMMAND
SQL Command với câu lệnh Select
Trang 13SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
String MaMH = txtMaMH.Text;
String TenMH = txtTenMH.Text;
int Sotiet = int.Parse(txtSotiet.Text);
cmd.CommandText = "Insert into Monhoc(MaMH,TenMH, Sotiet)
values('" + MaMH + "',N'" + TenMH +"'," + Sotiet +")"; cmd.ExecuteNonQuery();
SQL Command với câu lệnh Insert, Update, Delete
Trang 143 ĐỐI TƯỢNG DATAREADER
Nhiều thao tác dữ liệu chỉ lấy một luồng dữ liệu để đọc Đối tượng data Reader cho phép lấy được kết quả của câu lệnh SELECT 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ó lợi về mặt tốc độ
Là đối tượng truy cập dữ liệu trực tiếp sử dụng con trỏ phí Server và duy trì kết nối trong suốt quá trình đọc dữ liệu
Tuy nhiên nếu 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
Trang 15Các thuộc tính
FieldCout: Số cột trên dòng hiện hành của DataReader
IsClosed: Cho biết dataReader đã đóng
Item: Trị của cột truyền vào Tham số truyền vào là tên cột (hoặc số thứ tự từ 0)
Trang 163 ĐỐI TƯỢNG DATAREADER
Các phương thức
Close: Đóng DataReader
GetFieldType: Trả về kiểu dữ liệu của cột truyền vào
GetName: Trả về tên của cột truyền vào
GetValue: Trả về trị của cột truyền vào
Read : Di chuyển đến dòng kế tiếp và trả về true nếu còn dòng để di chuyển, ngược lại trả về False
Trong khi dataReader đang mở các thao tác dữ liệu trên nguồn dữ liệu đều không thể cho đến khi dataRaeder đóng lại bằng lệnh Close
Trang 17SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "Select * From Monhoc";
cmd.CommandType = CommandType.Text;
SqlDataReader dr ;
dr = cmd.ExecuteReader();
lstMonhoc.Items.Clear();
while (dr.Read())
lstMonhoc.Items.Add(dr["TenMH"]);
Trang 184 DATA ADAPTER
4.1 Giới thiệu
Để lầy dữ liệu từ nguồn dữ liệu vầ cho ứng dụng, chúng ta sử dụng một đối tượng gọi là DataAdapter Đối tượng này cho phép ta lấy cấu trúc và dữ liệu của các bảng trong nguồn dữ liệu
DataAdapte là một bộ gồm 4 đối tượng command:
SelectCommand: Cho phép lấy thông tin từ nguồn
InsertCommand: Cho phép thêm dữ liệu vào bảng
UpdateCommand: Cho phép điều chỉnh dữ liệu của bảng
DeleteCommand: Cho phép xóa dữ liệu của bảng
Trang 19 Đôi khi cần làm việc ở chế độ read-only và ít khi cần thay đổi dữ liệu nguồn, 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 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 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
Trang 204 DATA ADAPTER
4.2 Tạo DataAdapter
<Loai>DataAdapter <Tên> =
new <Loai>DataAdapter(Lệnh, biến connnection);
Với SQLSever:
sqlDataAdapterDataAdapter <Tên> =
new SQLDataAdapter(Lệnh, biến connection);
DataAdapter chỉ thao tác với một nguồn dữ liệu qua một đối tượng connection đang kết nối, khi Connection chưa
mở thì DataAdapter sẽ tự động mở kết nối khi cần và đóng lại