Transcript DataTable

CHƯƠNG V:
ADO.NET
Lý thuyết: 3 tiết
Thực hành 6 tiết
4/13/2015
1
ADO.NET
Tổng quan về ADO.NET
Tạo kết nối đến CSDL.
Các điều khiển ràng buộc danh sách(ListBound)
Hiển thị DataSet vào điều khiển ListBound
4/13/2015
2
TỔNG QUAN VỀ ADO.NET
ADO.NET cung cấp khả năng truy cập các
nguồn dữ liệu một cách nhất quán như
SQL Server, dữ liệu quản lý thông qua
OLE DB và XML
ADO.NET bao gồm các trình cung cấp dữ
liệu .NET (.NET data provider) cho việc
kết nối đến cơ sở dữ liệu, thực thi một câu
lệnh và truy xuất kết quả.
4/13/2015
3
TỔNG QUAN VỀ ADO.NET
Đối tượng ADO.NET Dataset cũng có thể
được sử dụng một cách độc lập với .NET
data provider để quản lý dữ liệu thuộc
những ứng dụng hoặc những nguồn từ
XML
Lớp ADO.NET được tìm thấy trong
namespace System.Data, và được tích
hợp với lớp XML được tìm thấy trong
namespace System.Xml Connection
4/13/2015
4
MôhìnhđốitượngADO.NET
4/13/2015
5
MôhìnhđốitượngADO.NET
4/13/2015
6
KHÔNG GIAN TÊN
Không gian tên sử dụng trong
ADO.NET gồm:
System.Data
System.Data.Common
System.Data.SqlClient: dùng cho cơ sở dữ liệu
SQL
System.Data.OleDb dùng cho cơ sở dữ liệu
access
4/13/2015
7
CẤU TRÚC CỦA ADO.NET
ADO.NET Components được thiết kế để
quản lý việc truy cập dữ liệu từ nguồn dữ
liệu. Có 2 thành phần chính trong
ADO.NET:
ADO.NET Dataset là thành phần chính của kiến
trúc kết nối gián đoạn của ADO.NET. Dataset
bao gồm tập hợp một hoặc nhiều đối tượng
DataTable
4/13/2015
8
CẤU TRÚC CỦA ADO.NET
 NET Data Provider - một tập hợp các thành
phần bao gồm các đối tượng
Connection: cung cấp việc kết nối đến CSDL
Command :truy cập các câu lệnh CSDL
DataReader: cung cấp một luồng truy xuất DL
DataAdapter: cung cấp cầu nối giữa đối tượng Dataset
và CSDL. DataAdapter sử dụng đối tượng Command
để thực thi các câu lệnh SQL
4/13/2015
9
CẤU TRÚC CỦA ADO.NET
4/13/2015
10
Các đối tượng trong ADO.Net
Đối tượng Connection
 Chức năng: Thiết lập kết nối đến cơ sở dữ
liệu
 Kết nối với cơ sở dữ liệu access:
OleDbConnection con;// Khai báo
String strcon;
strCon ="Provider=Microsoft.Jet.OleDb.4.0;Data Source =";
strCon = strCon + Server.MapPath(".") + "\\sv.mdb";
con = new OleDbConnection(strCon);
con.Open();
4/13/2015
11
Kết nối với cơ sở dữ liệu Sql:
SqlConnection con;// Khai báo
String strcon;
strCon=
“Server=ServerName;Database=DBName;uid=userName;pwd=password”;
con = new SqlConnection(strCon);
con.Open();
4/13/2015
12
Cácphươngthức:
ExecuteNonQuery():Thựcthinhữngcâulệnh
như: INSERT, UPDATE or DELETE
ExecuteScalar():Trảvềgiátrịđơntừmộttruyv
ấndữliệu.
ExecuteReader():Trảvềtậprecord.
4/13/2015
13
Các phương thức của Connection
Phương thức
Open(): mở kết nối
Close(): đóng kết nối
4/13/2015
14
Các đối tượng trong ADO.Net
Đối tượng Command: thực thi câu lệnh
SQL hoặc một Stored procedure
Một Data Command là một thể hiện của
class
OleDbCommand
hoặc
class
SqlCommand
4/13/2015
15
Các đối tượng trong ADO.Net
Các phương thức của DataCommand
 Cancel(): Huỷ bỏ thực thi của một
SqlCommand
 CreateParameter():Tạo một thể hiện mới
cho đối tượng SqlParameter.
4/13/2015
16
Các đối tượng trong ADO.Net
 ExecuteNonQuery(): Thực thi một câu lệnh T-SQL
dựa vào Connection và trả về số mẫu tin bị ảnh
hưởng như UPDATE, INSERT, DELETE.
 ExecuteScalar(): Trả về giá trị đơn (Giá trị cụ thể như
1 table, 1 record, 1 filed …) từ một truy vấn dữ liệu.
 ExecuteReader():
Gửi
CommandText
đến
Connection và xây dựng một SqlDataReader, trả về
tập các records
4/13/2015
17
Các đối tượng trong ADO.Net
Các thuộc tính của Data Command
 Connection: Command tham chiếu đến
một connection, đối tượng này dùng để
giao tiếp với cơ sở dữ liệu, nhận hay trả
về SqlConnection mà command sử dụng
 CommandText: nhận hoặc trả về câu lệnh
T-Sql hay thủ tục để thực thi
4/13/2015
18
Các đối tượng trong ADO.Net
CommandTimeout: nhận hay trả về thời
gian chờ thực thi
CommandType: nhận/ trả về giá trị cho
biết loại commandtext được gán, các giá
trị gồm StoredProcedure,
TableDirect,Text. Mặc định là Text
OleDbCommand cmd = new OleDbCommand(strsql,con);
(với strsql là câu truy vấn cụ thể )
4/13/2015
19
Các đối tượng trong ADO.Net
 DataReader: được sử dụng trong những
ứng dụng web với những thao tác ngắn
với từng yêu cầu, thường là chỉ để hiển
thị dữ liệu.
 Có 2 loại DataReader: OleDbDataReader
và SqlDataReader.
 DataReader cung cấp cách truy xuất dữ
liệu forward-only, read – only.
4/13/2015
20
Các đối tượng trong ADO.Net
Để dùng SqlDataReader phải khai báo
một SqlCommand. SqlCommand cung cấp
một phương thức ExecuteReader() mà nó
trả về một SqlDataReader khi thi hành một
câu lệnh SQL hoặc một stored Procedure
4/13/2015
21
Các đối tượng trong ADO.Net
OleDbCommand cmd;
String strSql;
strSql = "select * from tblsv";
cmd = new OleDbCommand(strSql, con);
rd = cmd.ExecuteReader();
OleDbCommand cmd;
Tương đương
String strSql;
strSql = "select * from tblsv";
cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandText = strSql;
rd4/13/2015
= cmd.ExecuteReader();
22
Các đối tượng trong ADO.Net
Phương thức của DataReader
Read(): Đọc tới record cuối cùng EOF.
NextResult(): di chuyển tới record kế tiếp
Để đọc giá trị của từng field. Sử dụng câu lệnh:
DataReader rs;// Khai báo
rs[“NameFiled”] or rs[index]
Chú ý: Nhớ Convert về kiểu chuỗi
Example: varName=Convert.ToString(rs[“Name”])
4/13/2015
23
4/13/2015
24
Từng bước kết nối ADO.Net
Để sử dụng DataReader cần phải thực
hiện các bước sau:
Tạo và mở kết nối CSDL Connection
Tạo đối tượng Command
TạoDataReader từ đối tượng Command
Gọi phương thức ExecuteReader
Sử dụng đối tượng DataReader
Đóng đối tượng DataReader
Đóng đối tượng Connection
4/13/2015
25
Từng bước kết nối trong ADO.Net
OleDbConnection con;
OleDbCommand cmd;
OleDbDataReader rs;
String strSQL,strCon;
strCon=“Information connect to Database”;
strSQL=“SQL statement”;
con=new OleDbConnection(strCon);
con.Open();
cmd=new OleDbCommand(strSQL);
cmd.Connection=con;
rs=cmd.ExecuteReader();// if strSQL is Select statement
4/13/2015
26
Từng bước kết nối trong ADO.Net
Sử dụng DataReader để chứa dữ liệu truy xuất được
while(rs.Read())
{
//varName=rs[“FieldName”];
//process varName according to application
}
4/13/2015
27
Example
Database chứa 1 table:
tblCustomer(CustomerID,Name)
Viết kết nối vào database và thực các công việc sau:
1) Hiển thị danh sách Customers ở dạng bảng sau:
Danh Sach Khach Hang
Mã khách hàng
Họ tên
KH098
Phan Hoai An
2) Thêm 1 customer
3) Sửa đổi thông tin 1 customer
4) Xóa 1 customer
4/13/2015
28
Answer 1)
protected void Page_Load(object sender, EventArgs e)
{
string strconn = "server=H52PC14;";
strconn += "database=Northwind;uid=sa;pwd=;";
SqlConnection conn=new SqlConnection(strconn);
string sql="SELECT EmployeeID,FirstName FROM Employees";
SqlCommand cmd=new SqlCommand(sql,conn);
conn.Open();
SqlDataReader dr;
dr=cmd.ExecuteReader();
while(dr.Read())
{
string text=dr["FirstName"].ToString();
string value=dr["EmployeeID"].ToString();
drCategory.Items.Add(new ListItem(text,value));
}
4/13/2015
29
Answer 2)
string strconn = "server=H52PC14;";
strconn += "database=Northwind;uid=sa;pwd=;";
SqlConnection conn = new SqlConnection(strconn);
//string sql ="select UserID,UserName from Users";
string sql="Insert into Users(UserName,UserID,Pass) values
('miny','002','dfgg')";
//sql = sql + UserName + "'" + "," + "'" + UserID + "')";
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
SqlDataReader dr;
dr = cmd.ExecuteReader();
while (dr.Read())
{
ListBox1.Items.Add(dr[0].ToString());
4/13/2015
30
Answer 3) Delete record
protected void Page_Load(object sender, EventArgs e)
{
string strconn = "server=H52PC14;";
strconn += "database=Northwind;uid=sa;pwd=;";
SqlConnection conn = new SqlConnection(strconn);
string sql = "delete from Users where UserID='01'";
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
string a = cmd.ExecuteReader().ToString();
4/13/2015
31
Answer 4)
<%
….
strSQL=“update set Name=‘”+varName+”’ where
CustomerID=‘“+ varID +”’”;
…..
cmd.ExecuteNonQuery();
%>
4/13/2015
32
Các đối tượng trong ADO.Net
•DataTable
•DataSet
•DataAdapter
4/13/2015
33
DataTable
•DataView
•DataRowView
•DataColumn
•DataRow
•DataTable
4/13/2015
34
DataTable
•DataView
DataView dv=new DataView();
Thuộc tính của DataView
.Count : Trả về số records có trong the DataView
.RowFilter: Thiết lập hoặc trả về giá trị lọc theo 1 hàng bất
kỳ sẽ hiển thị trên DataView.
.Sort: Sắp xếp thứ tự của 1 cột hay nhiều cột trong
DataView.
4/13/2015
35
DataTable
•DataView
Ví dụ về các thuộc tính của DataView
int num;
num=dv.Count;
dv.RowFilter=“Expression condition”;
dv.RowFilter=“FieldNameColumn>=10”;
dv.Sort=“List FieldName sort” ; //ASC, DESC
dv.Sort=“FieldName1,FieldName2 DESC”;
dv.Sort = "EMpID";
drView = dv.FindRows(EmpIDvalue); //drView is
array
4/13/2015
36
DataTable
•DataView
DataView dv=new DataView()
Method of DataView
FindRows: Trả về 1 mảng đối tượng DataRowView mà
hàng đó sẽ tìm.
DataRowView[] drView;
dv.Sort=“FieldName”;
drView=dv.FindRows(value)
// Với value: FieldName
4/13/2015
37
DataTable
•DataRowView
DataRowView drView=new DataRowView()
drView[i] or drView[“FieldNameColumn”] : giá trị trả về
String valueF;
valueF=drView[“StudentID”];
Or
valueF=drView[0];
4/13/2015
38
DataTable
 DataColumn: Trình bày lược đồ của
một cột trong một DataTable. Mỗi
DataColumn có một thuộc tính
DataType để xác định kiểu dữ liệu
được lưu trữ trong DataColumn
DataColumn objColumn=new DataColumn(“ColumnName”);
DataTable dt=new DataTable();
Dt.Columns.Add(objColumn);
4/13/2015
39
Đối tượng DataTable
DataRow: trình bày một dòng dữ liệu
trong DataTable
Khởi tạo:
DataRow dr=new DataRow();
dr[i] or dr[“FieldName”]: //return value
4/13/2015
40
Đối tượng DataTable
Các thuộc tính- phương thức của
DataTable
.Columns: trả về các cột trong Datatable
.Columns.Count: trả về số cột trong bảng
.Columns.Add(DataColumn): Thêm cột vào bảng
.Rows :trả về các dòng, mỗi dòng là một đối tượng
datarow
.Rows.Count :trả về số dòng trong bảng
.Rows.Add(DataRow):thêm một dòng vào bảng
4/13/2015
41
DataTable
•DataTable: Là đối tượng để biểu diễn thông tin trong
Dataset.
DataColumn
DataRow
ColName1
ColName2
….
ColNameN
Data11
Data12
…
Data1N
…
…
…
…
DataM1
DataM2
….
DataMN
4/13/2015
42
DataTable
•DataTable
DataTable dt=new DataTable();
.Columns:Trả về tập hợp các columns có trong table
Count
dt.
dt.Columns
Add(objColumn)
.Rows: Trả về tập hợp các rows có trong table dt.
dt.Rows
4/13/2015
Count
Add(objRow)
43
DataTable
•DataTable
DefaultView: 1 đối ượng DataView (Dạng hiển thị khác của
DataTable)
DataTable dt=new DataTable();
Phương thức DataTable
NewRow():Tạo 1 dòng mới DataRow
DataRow dr;
dr=dt.NewRow();
4/13/2015
44
DataSet
DataSet bao gồm tập các đối tượng
DataTable mỗi DataTable điển hình tương
đương với một table hoặc là một view mà
ta có thể thiết lập mối quan hệ giữa chúng
thông qua đối tượng DataRelation.
Dữ liệu trong DataSet có thể nhất quán
bằng cách sử dụng đối tượng
UniqueConstraint
và
ForeignKeyConstraint
4/13/2015
45
DataSet
•DataSet
DataSet ds; //Khai báo
DataSet ds=new DataSet();//Khai báo và khởi tạo
.Tables: trả về tất cả các Table chứa trong Dataset.
ds.Tables[i] or ds.Tables[“tblName”] : Trả về đối
tượng Table thứ i hoặc Table có “tên tblName
Count
ds.Tables
4/13/2015
Add(objTable)
46
DataSet
 public DataSet Laydulieu(string sql)

{

OleDbCommand cmd;

cmd = new OleDbCommand(sql);

OleDbDataAdapter da = new OleDbDataAdapter(sql,con);

DataSet ds = new DataSet();

da.Fill(ds);

4/13/2015
return ds;
}
47
DataAdapter
•DataAdapter
The DataAdapter : Là đối tượng trung gian giữa 1 DataSet
và nguồn dữ liệu nhận được, dùng để lưu dữ liệu.
DataAdapter.Fill(ds) : Hiển thị data lên Dataset ds
OleDbDataAdapter class.
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
(với cmd: OleDbCommand (Đã có))
4/13/2015
48
Example
OleDbDataAdapter da;
da=new OleDbDataAdapter(strSQL,con);
DataSet ds=new DataSet(“tblA”);
da.Fill(ds);
DataTable dt;
dt=ds.Tables[“tblA”]; //ds.Tables[0]
foreach(DataRow dr in dt.Rows)
{
varName1= Convert.ToString(dr[“StudentID”]);
varName2= Convert.ToString(dr[“Name”]);
//process varName1, varName2
}
4/13/2015
49
Khai báo chuỗi kết nối trong file Web.Config:
<configuration>
<appSettings/>
<connectionStrings/>
<configuration>
<appSettings>
<add key="ConnectionString"
value="Provider=Microsoft.Jet.OleDb.4.0;Data Source
=HOADON.mdb"/>
</appSettings>
<connectionStrings/>
Database được lưu trong thư mục gốc trong Visual Studio.Net:
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\HOADON.mdb
4/13/2015
50
Truy xuất chuỗi kết nối tại trang bất kỳ
string strcon;
strcon=ConfigurationManager.AppSettings["ConnectionString"];
con= new OleDbConnection(strcon);
con.ConnectionString=strcon;
con.Open();
4/13/2015
51