Phần 3: Lập trình CSDL bằng WinForm
Nội Dung
Tổng quan về ADO.NET
Sử dụng các Database Connection
Sử dụng Command
Truy cập cơ sở dữ liệu với Data Reader
Sử dụng DataSet
Hiển thị dữ liệu sử dụng DataGridView
Sử dụng Store Procedure
Cập nhật dữ liệu
08/13/14 Võ Phương Bình – ITFAC - DLU 2
ADO.NET
ADO (ActiveX Data Objects) là một thư
viện của các thành phần COM, bao gồm các
thành phần:
Connection, Command, Recordset, và Field.
ADO.NET chứa 2 không gian tên cơ sơ dữ
liệu:
Một cho SQL Server.
Một cho các cơ sở dữ liệu được trình bày thông
qua một giao diện OLE DB.
08/13/14 Võ Phương Bình – ITFAC - DLU 3
ADO.NET (tt)
Namespace
System.Data
○
Các lớp truy xuất dữ liệu chung
System.Data.OleDb
○
Các lớp của OLE DB provider
System.Data.SqlClient
○
Các lớp của SQL Server provider
08/13/14 Võ Phương Bình – ITFAC - DLU 4
ADO.NET (tt)
Các lớp dùng chung
DataSet
○
Chứa các DataTable, quan hệ giữa các bảng, và được
thiết kế cho truy xuất dữ liệu không kết nối.
DataTable
○
Gồm các thuộc tính dữ liệu DataColumn và DataRows.
DataRow
○
Một dòng trong bảng cơ sở dữ liệu.
DataColumn
○
Chứa tên và kiểu dữ liệu của một cột.
08/13/14 Võ Phương Bình – ITFAC - DLU 5
ADO.NET (tt)
Các lớp cơ sở dữ liệu chuyên biệt
SqlCommand, OleDbCommand
○
Thực thi lệnh SQL hoặc lời gọi stored procedure.
SqlConnection, OleDbConnection
○
Kết nối với cơ sở dữ liệu.
SqlDataAdapter, OleDbDataAdapter
○
Chứa các câu lệnh select, insert, update, và delete, được
sử dụng để tạo một DataSet và cập nhật Database.
SqlDataReader, OleDbDataReader
○
Bộ dữ liệu chỉ đọc, kết nối với DataReader.
SqlParameter, OleDbParameter
○
Tham số cho một stored procedure.
08/13/14 Võ Phương Bình – ITFAC - DLU 6
Database Connection
Đoạn mã sau đây mô tả cách để tạo, mở và đóng một
kết nối đến cơ sở dữ liệu Northwind:
1. using System.Data.SqlClient;
2. string source = "server=(local);
database=Northwind; uid=sa; pwd=sa";
3. SqlConnection conn = new
SqlConnection(source);
4. conn.Open();
5. // SQL truy vấn …
6. conn.Close();
08/13/14 Võ Phương Bình – ITFAC - DLU 7
Command
Command dùng chuỗi lệnh SQL để truy xuất dữ
liệu hay sử dụng Store Procedure.
1. string select = "SELECT ContactName,
CompanyName FROM Customers";
2. SqlCommand cmd = new SqlCommand(select,
conn);
CommandType: thuộc tính chỉ việc sử dụng chuỗi
SQL hay Store Procedure.
08/13/14 Võ Phương Bình – ITFAC - DLU 8
Command (tt)
CommandType Example
Text
(default)
String select = "SELECT ContactName FROM
Customers";
SqlCommand cmd = new SqlCommand(select , conn);
StoredProcedure SqlCommand cmd = new
SqlCommand("CustOrderHist", conn);
cmd.CommandType =
CommandType.StoredProcedure;
cmd.Parameters.Add("@CustomerID", "QUICK");
TableDirect OleDbCommand cmd = new
OleDbCommand("Categories", conn);
cmd.CommandType = CommandType.TableDirect;
08/13/14 Võ Phương Bình – ITFAC - DLU 9
Command (tt)
Thực thi Command
ExecuteNonQuery()
○
Thực thi các command không trả về kết quả gì cả
ExecuteReader()
○
Thực thi các command và trả về kiểu
IDataReader
ExecuteScalar()
○
Thực thi các command và trả về một giá trị đơn
08/13/14 Võ Phương Bình – ITFAC - DLU 10
Gọi Stored Procedure
CREATE PROCEDURE SelectCustomers
(
@CustomerID nchar(5),
@Count int OUT
)
AS
Begin
Select @Count = count(*) From Customers Where CustomerID
> @CustomerID
Select * From Customers Where CustomerID = @CustomerID
End
GO
08/13/14 Võ Phương Bình – ITFAC - DLU 11
Gọi Stored Procedure (tt)
1. SqlCommand cmd = new SqlCommand("SelectCustomers",
conn);
2. cmd.CommandType = CommandType.StoredProcedure;
1. SqlParameter pa1 = new SqlParameter("@CustomerID",
comboBox1.Text);
2. SqlParameter pa2 = new SqlParameter("@Count",
SqlDbType.Int);
3. pa2.Direction = ParameterDirection.Output;
4. cmd.Parameters.Add(pa1);
5. cmd.Parameters.Add(pa2);
3. SqlDataAdapter da = new SqlDataAdapter(cmd);
08/13/14 Võ Phương Bình – ITFAC - DLU 12
Data Reader
Data reader là cách đơn giản nhất và nhanh nhất
để chọn một vài dữ liệu từ một nguồn cơ sơ dữ
liệu, nhưng có ít tính năng.
1. SqlCommand cmd = new SqlCommand(select ,
conn);
2. SqlDataReader aReader = cmd.ExecuteReader();
while(aReader.Read())
Console.WriteLine(" '{0}' from {1}" ,
aReader.GetString(0) , aReader.GetString(1));
1. aReader.Close();
08/13/14 Võ Phương Bình – ITFAC - DLU 13
DataSet
DataSet
DataTable
○
DataRow
○
DataColumn
○
UniqueConstraint
○
ForeignKeyConstraint
DataRelation
DefaultView
08/13/14 Võ Phương Bình – ITFAC - DLU 14
DataSet (tt)
1. SqlDataAdapter da = new SqlDataAdapter(select,
conn);
2. DataSet ds = new DataSet();
3. da.Fill(ds , "Customers");
4. foreach(DataRow row in ds.Tables
["Customers"].Rows)
5. Console.WriteLine("'{0}' from {1}”, row[0],
row[1]);
08/13/14 Võ Phương Bình – ITFAC - DLU 15
DataGridView
1. SqlDataAdapter da = new
SqlDataAdapter(select, conn);
2. DataSet ds = new DataSet();
3. da.Fill(ds , "Customers");
4. dataGridView1.DataSource = ds.Tables[0];
08/13/14 Võ Phương Bình – ITFAC - DLU 16
DataGridView (tt)
08/13/14 Võ Phương Bình – ITFAC - DLU 17
Cập nhật dữ liệu
08/13/14 Võ Phương Bình – ITFAC - DLU 18
Cập nhật dữ liệu
Cơ bản thực thi các câu lệnh SQL cập nhật:
Insert, Update, Delete
Có 2 cách:
Thực thi trực tiếp câu lệnh SQL.
Gọi Store Procedure.
08/13/14 Võ Phương Bình – ITFAC - DLU 19