Nội dungHoàng Hữu Việt Các khái niệm Các đối tượng của ADO.NET Xây dựng lớp truy nhập dữ liệu... Các khái niệmHoàng Hữu Việt ADO.NET là công nghệ truy nhập dữ liệu có cấu trúc Cung cấp g
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÁC HỆ THỐNG THÔNG TIN
Chương 5 ADO.NET
Hoàng Hữu Việt – IT Faculty, Vinh University Email: viethh.vinhuni@gmail.com
Trang 2Nội dung
Hoàng Hữu Việt
Các khái niệm
Các đối tượng của ADO.NET
Xây dựng lớp truy nhập dữ liệu
Trang 3Các khái niệm
Hoàng Hữu Việt
ADO.NET là công nghệ truy nhập 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
Trang 4more than one table supported
Trang 5Các khái niệm
Hoàng Hữu Việt
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 truyền thông trực tiếp
với cơ sở dữ liệu.
Disconnected: Các đối tượng không truyền thông
trực tiếp với cơ sở dữ liệu.
Trang 6Các khái niệm
Hoàng Hữu Việt
Disconnected Objects
DataSet DataTable DataView DataRow DataColumn Constraint DataRelation
Connected Objects
Connection Transaction DataAdapter Command Parameter DataReader
Trang 7Các khái niệm
Hoàng Hữu Việt
Microsoft 3-Tier Architecture
from: Introduction to Data Access with ADO.NET, http://msdn.microsoft.com/library/
Trang 9DataViewManager
Trang 100 1 2
2
0 1 2
12
0
DataColumn
DataColumn
Trang 11Các khái niệm
Hoàng Hữu Việt
DataTable
Có thể ánh xạ một bảng vật lý với DataTable Một DataTable là một mảng 2 chiều gồm các dòng
và các cột Một số thuộc tính
Columns: Các cột dữ liệu của DataTable
Count: Số cột trong DataTable
Rows: Các dòng dữ liệu của DataTable
Count: Số dòng trong DataTable
Trang 12Các khái niệm
Hoàng Hữu Việt
DataTable
Có thể tạo một DataTable trong bộ nhớ
DataTable myTable = new DataTable();
myTable.Columns.Add(“MaKhoa”, typeof(string));
myTable.Columns.Add(“TenKhoa”, typeof(string));
Trang 13Các khái niệm
Hoàng Hữu Việt
ADO.NET tổ chức thành mô hình đối tượng
System.Data System.Data.OleDb System.Data.Common System.Data.SqlClient
System.Data
.OleDb Common SqlClient SqlTypes
Trang 14Các khái niệm
Hoàng Hữu Việt
System.Data: Các lớp của ADO.NET
System.Data.OleDb: Các lớp làm việc với
dữ liệu OLE DB
System.Data.SqlClient: Các lớp làm
việc với cở sở dữ liệu SQL Server
Trang 15Các đối tượng
Hoàng Hữu Việt
ADO.NET Data Providers
Là các lớp truy nhập dữ liệu nguồn
Microsoft SQL Server™ 2000, SQL Server 7 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 nhập cơ sở dữ liệu OLE System.Data.SqlClient: Truy nhập SQL Server
Trang 16Các đối tượng
Hoàng Hữu Việt
ADO.NET Data Providers
.OleDb
OleDbCommand OleDbConnection OleDbDataReader OleDbDataAdapter
Trang 17Các đối tượng
Hoàng Hữu Việt
Đối tượng Connection
Biểu diển kết nối tới cơ sở dữ liệu
//Ket noi toi co so du lieu MS Access
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=<DataName>";
OleDbConnection myConnection = new OleDbConnection(conStr);
myConnection.Open();
//Ket noi toi co so du lieu SQL Server
string conStr = “Data Source = <Computer Name>;“ +
“Persist Security Info = true;“ +
“Initial Catalog = <DataName>;“ +
“User Id =name; Password=psw;”
“Connect Timeout = <seconds>”;
SqlConnection myConnection = new SqlConnection(conStr);
myConnection.Open();
Trang 18Các đối tượng
Hoàng Hữu Việt
Đối tượng DataAdapter
Dùng để lấy dữ liệu từ dữ liệu nguồn vào DataSet Dùng để 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
Trang 19Các đối tượng
Hoàng Hữu Việt
Đối tượng DataAdapter
Fill
Update
data store
Trang 20Các đối tượng
Hoàng Hữu Việt
Đối tượng DataAdapter
Ví dụ phương thức Fill lấy dữ liệu vào DataTable
string conStr = “Data Source = may01;" +
“Initial Catalog = QLSV;“ +
“Persist Security Info = true;“ +
“User Id =sa; Password=sa; Connect Timeout =50 ”;
//Ket noi toi co so du lieu
SqlConnection myConnection = new SqlConnection(conStr);
myConnection.Open();
string sqlStr = “SELECT * FROM tblKhoaDaoTao”;
SqlDataAdapter myDataAdapter = new SqlDataAdapter(sqlStr,myConnection);
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet,”tblKhoaDaoTao”);
DataTable myTable = myDataSet.Tables[“tblKhoaDaoTao”];
Trang 21Các đối tượng
Hoàng Hữu Việt
Đối tượng DataAdapter
Ví dụ xây dựng form hiển thị dữ liệu
Name: txtMaKhoa Name: txtTenKhoa
Name: btnFirst, btnPrevious, btnNext, btnLast
Trang 22+ + +
Các đối tượng
Hoàng Hữu Việt
Đối tượng DataAdapter
private string conStr = "Data Source = (local);"
"Initial Catalog = QLSinhVien;"
"persist security info = true;"
"User Id=sa; Password=sa; Connect Timeout =50";
private SqlConnection myConnection;
private SqlDataAdapter myDataAdapter;
string SqlStr = "SELECT * FROM tblKhoaDaoTao";
myDataAdapter = new SqlDataAdapter(SqlStr, conStr);
myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet, "tblKhoaDaoTao");
myTable = myDataSet.Tables["tblKhoaDaoTao"];
btnFirst.PerformClick();
Trang 23Các đối tượng
Hoàng Hữu Việt
Đối tượng DataAdapter
private void btnFirst_Click(object sender, EventArgs e)
Trang 24Các đối tượng
Hoàng Hữu Việt
Đối tượng DataAdapter
private void btnNext_Click(object sender, EventArgs e)
Trang 25Các đối tượng
Hoàng Hữu Việt
Đối tượng DataGridView
Dùng để hiển thị dữ liệu từ 1 DataTable Cách thực hiện
Thêm đối tượng DataGridView vào Form
Nháy chuột phải và chọn Add column hoặc Edit
columns
Lần lượt chọn Add để thêm các cột
Mỗi cột cần khai báo các thuộc tính
Name: Tên cột dùng trong mã lệnh Header text: Tiêu đề hiển thị của cột DataPropertyName: Tên cột dữ liệu của DataTable.
Trang 26Các đối tượng
Hoàng Hữu Việt
Đối tượng DataGridView
DataSource: Tên DataTable cần hiển thị lên lưới AutoGenerateColumns : T ự động lấy các cột nếu bằng true, ngược lại lấy đúng số cột đã khai báo.
Trang 27Các đối tượng
Hoàng Hữu Việt
Đối tượng DataGridView
Sự kiện thường dùng
RowEnter : Xảy ra khi con trỏ đưa vào một dòng
e.RowIndex: Dòng hiện thời e.ColumnIndex: Cột hiện thời
Trang 28Các đối tượng
Hoàng Hữu Việt
Đối tượng DataGridView
Hiển thị dữ liệu trong bảng tblKhoaDaoTao lên
lưới, khi chuyển con trỏ trên lưới dữ liệu hiển thị lên TextBox.
Trang 29Các đối tượng
Hoàng Hữu Việt
Đối tượng DataGridView
private string conStr = "Data Source = (local);" +
"Initial Catalog = QLSinhVien;" +
"persist security info = true;" +
"User Id=sa; Password=sa; Connect Timeout =50";
private SqlDataAdapter myDataAdapter;
string SqlStr = "SELECT * FROM tblKhoaDaoTao";
myDataAdapter = new SqlDataAdapter(SqlStr, conStr);
myDataSet = new DataSet();
Trang 30Các đối tượng
Hoàng Hữu Việt
Đối tượng DataGridView
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
Trang 31Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommand
Dùng để thực hiện câu lệnh SQL
Insert Update Delete
Trang 32Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommand
Khai báo biến
private string conStr =“Data Source = ;”;
private SqlConnection myConnection;
Trang 33Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommand
Thiết kế Form cho phép nhập, xoá bảng dữ liệu tblKhoaDaoTao
Trang 34Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommand
private string conStr = "Data Source = (local);" +
"Initial Catalog = QLSinhVien;" +
"persist security info = true;" +
"User Id=sa; Password=sa; Connect Timeout =50";
private SqlDataAdapter myDataAdapter;
private SqlCommand myCommand;
private SqlConnection myConnection;
Trang 35Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommand
private void Display()
{
string SqlStr = "SELECT * FROM tblKhoaDaoTao";
//Tao thong qua xau ket noi da mo
myDataAdapter = new SqlDataAdapter(SqlStr, myConnection);
myDataSet = new DataSet();
//Mo ket noi
myConnection = new SqlConnection(conStr);
myConnection.Open();
Display();
SetControls(false);
}
Trang 36Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommand
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
Trang 37Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommand
private void btnSave_Click(object sender, EventArgs e)
{
string sSql;
sSql = "Insert Into tblKhoaDaoTao (MaKhoa, TenKhoa)"+
"Values (N'"+ txtMaKhoa.Text + "',N'" + txtTenKhoa.Text + "')";
myCommand = new SqlCommand(sSql, myConnection);
sSql = "Delete From tblKhoaDaoTao " +
"Where MaKhoa = N'" + txtMaKhoa.Text + "'";
myCommand = new SqlCommand(sSql, myConnection);
myCommand.ExecuteNonQuery();
Display();
}
Trang 38Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
Tự động thực hiện Update, Insert, Delete
Update
Trang 39Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
Khai báo các biến
private string conStr = “Data Source = ;”;
private private
SqlConnection SqlDataAdapter
myConnection;
myDataAdapter;
private private private
DataSet DataTable string
myDataSet;
myTable;
sqlStr;
Trang 40Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
Tạo kết nối tới cơ sở dữ liệu
myConnection = new SqlConnection(conStr);
Trang 41Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
Trang 42Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
Note: pos là dòng cần sửa
Loại bỏ sửa đổi dòng
myTable.RejectChanges();
Trang 43Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
Thiết kế Form cho phép nhập, xoá bảng dữ liệu tblKhoaDaoTao
Trang 44Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
private string conStr = "Data Source = (local);" +
"Initial Catalog = QLSinhVien;" +
"persist security info = true;" +
"User Id=sa; Password=sa; Connect Timeout =50";
private SqlDataAdapter myDataAdapter;
private SqlCommandBuilder myCommandBuilder;
Trang 45Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
private void Display()
{
string SqlStr = "SELECT * FROM tblKhoaDaoTao";
//Tao thong qua xau ket noi da mo
myDataAdapter = new SqlDataAdapter(SqlStr, myConnection);
//Tao myCommandBuilder
myCommandBuilder = new SqlCommandBuilder(myDataAdapter);
myDataSet = new DataSet();
Trang 46Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
Trang 47Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
private void btnSave_Click(object sender, EventArgs e)
Trang 48Các đối tượng
Hoàng Hữu Việt
Đối tượng SqlCommandBuilder
Bài tập: Thiết kế form
Trang 49Các đối tượng
Hoàng Hữu Việt
Đối tượng ListBox và ComboBox
ListBoxes: Cho phép người dùng xem và chọn
các dòng dữ liệu từ danh sách
ComboBox: Sự kết hợp của TextBox và LixtBox
Trang 50Các đối tượng
Hoàng Hữu Việt
Đối tượng ListBox và ComboBox
DataSource: Nguồn dữ liệu, là một DataTable DisplayMember: Cột hiển thị trong ListBox ValueMember: Cột giá trị trả về khi chọn ListBox SelectedIndex: Dòng hiện thời được chọn
SelectedValue: Giá trị được chọn trên ListBox
Trang 51Các đối tượng
Hoàng Hữu Việt
Đối tượng ListBox và ComboBox
Ví dụ hiển thị dữ liệu trong tblKhoaDaoTao
Trang 52Lớp truy nhập cơ sở dữ liệu
Hoàng Hữu Việt
Mọi form không phụ thuộc vào cơ sở dữ liệu
Chỉ kết nối dữ liệu một lần khi chạy ứng dụng Mỗi form sử dụng các đối tượng lớp
Lấy dữ liệu vào DataTable Cập nhật dữ liệu từ DataTabe vào cơ sở dữ liệu Thực hiện các câu lệnh SQL thao tác với dữ liệu
private static SqlConnection myConnection;
private SqlDataAdapter myDataAdapter;
public DataServices()
{
}
~DataServices()
Trang 53Lớp truy nhập cơ sở dữ liệu
Hoàng Hữu Việt
Mã nguồn
public bool OpenDB(string myComputer,string myDatabase,string myUser,string myPassword)
{
string strConnection = "Data Source='" + myComputer + "';" +
"Initial Catalog='" + myDatabase + "';" +
"Persist Security Info=True;" +
"User ID='" + myUser + "';Password='" + myPassword + "';" +
Trang 54Lớp truy nhập cơ sở dữ liệu
Hoàng Hữu Việt
} catch (SqlException) {
} catch (Exception) {
} myConnection = null;
}
}
}
Trang 55Lớp truy nhập cơ sở dữ liệu
Hoàng Hữu Việt
Trang 56Lớp truy nhập cơ sở dữ liệu
Hoàng Hữu Việt
Mã nguồn
public DataTable RunQuery(string QueryString, string TableName)
{
DataSet myDataSet = new DataSet();
myDataAdapter = new SqlDataAdapter();
try
{
myDataAdapter.SelectCommand = new SqlCommand(QueryString, myConnection);
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myDataAdapter);
Trang 57Lớp truy nhập cơ sở dữ liệu
Hoàng Hữu Việt
Trang 58Hoàng Hữu Việt
Forward-only data access
“Lightweight” programming model
Less overhead than using OleDbDataAdapter
Instantiated & returned by
SqlCommand ExecuteReader
Ties up the SqlCommand until it is finished
reading
Trang 59RecordsAffected : Number of affected records
Methods to retrieve data
By column type and/or index: GetValue;
GetString; etc.
Read(): Advances reader to next record NextResult(): Advanced to next result set in batch GetValues(): Gets the current row
Trang 60SqlDataReader Sample
Hoàng Hữu Việt
Code pattern to add Items to checklistBox
//String for creating the SqlConnection “myConn” not shown
myConn.Open();
string sSql = "SELECT * FROM NGANH";
SqlDataReader myReader = myCmd.ExecuteReader();
Trang 61Các đối tượng ADO.NET
Hoàng Hữu Việt
4.) Release Resources } catch ( Exception ){
Handle exception } finally {
try {
5.) Close connection } catch (Exception)
{ Handle exception } }
Trang 62Hoàng Hữu Việt
ADO.NET is the evolution of ADO
It is a disconnected, Web-centric model
Flexible in its ability to work with data
Increases your ability to logically organize data
Extensive support for XML
Facilitates working with and sharing data
Interacts with a wide variety of data sources