C4 - Kết Nối Cơ Sở Dữ Liệu Với

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 51

Chương 4:

Kết nối cơ sở dữ liệu với ADO.NET


Nguyễn Mạnh Tuấn
tuannm@ueh.edu.vn
Lịch sử phát triển

2
Lịch sử phát triển

3
Kiến trúc ADO.NET

4
ADO.NET
 ADO.NET là công nghệ truy xuất 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

5
ADO.NET
 ADO.NET = ActiveX Data Objects
 Các đối tượng ADO.NET chứa trong
namespace System.Data.
 Các đối tượng ADO.NET chia thành 2 loại:
 Connected: Các đối tượng kết nối trực tiếp với cơ
sở dữ liệu.
 Disconnected: Các đối tượng không kết nối trực
tiếp với cơ sở dữ liệu.

6
ADO.NET

7
Kiến trúc ADO.NET

8
Data Providers
 ADO.NET Data Providers
 Là các lớp truy xuất dữ liệu nguồn
 Microsoft SQL Server
 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 xuất cơ sở dữ liệu OLE
 System.Data.SqlClient: Truy xuất SQL Server

9
Data Providers
 ADO.NET Data Providers

10
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.

11
Kết nối CSDL với quyền chứng thực của
Windows trong C#
 Khi kết nối với CSDL SQL Server với quyền chứng
thực của Windows thì chuỗi kết nối sẽ không tồn tại
hai thuộc tính User Id và Password
 Chuỗi kết nối sẽ có thuộc tính Integrated Security =
SSPI hoặc Integrated Security = True

12
Kết nối CSDL với quyền chứng thực của SQL
Server trong C#
 Trong trường hợp chúng ta muốn kết nối với SQL
Server bằng quyền chứng thực của SQL Server thì
chỉ cần thay Integrated Security=True bằng hai
thông số User Id và PWD
❑ User Id: Tài khoản được tạo bởi SQL Server
❑ PWD: Mật khẩu của tài khoản muốn kết nối

13
Tập tin lưu trữ chuỗi kết nối
 Thường sử dụng các loại định dạng file như: *.ini,
*.txt
 Trong Winform thường dùng file App.config với cấu
trúc nội dung được tổ chức theo dạng XML
<configuration>
<startup>
<supportedRuntime version="v4.0"
sku=".NETFramework,Version=v4.7.2" />
</startup>
<connectionStrings>
<add name="SqlServer"
connectionString="Server=(local);database=hoadon;uid=sa;pwd=hihipass"
providerName="System.Data.SqlClient"></add>
</connectionStrings>
</configuration>

14
Connection
❖Chuỗi kết nối bao gồm:
▪ Data Source: tên_máy_hay_IP[\tênSqlServer]
▪ Initial Catalog : tên_dữ_liệu_trong_SQLServer
▪ Integrated Security: True/False
▪ User ID : tên_login_trong_SQLServer
▪ Password: mật_khẩu
VD:
“Data Source =
LHTTUNG\\SQLTUNGINSTANCE; Initial
Catalog = QLBH; Integrated Security=True;
User Id = sa; Password = 123”

15
Connection

SqlConnection cnn = new SqlConnection();


cnn.ConnectionString = “Data
Source=LHTTUNG\\SQLTUNGINSTANCE; Initial Catalog
= QLBH; Integrated Security=True; User Id = sa;
Password = 123”;
cnn.Open();
// Code xử lý.
cnn.Close();

16
Command

❖ Thuộc tính và phương thức của 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.

17
Command
SqlConnection cnn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
cnn.ConnectionString = “Data
Source=LHTTUNG\\SQLTUNGINSTANCE; Initial Catalog = QLBH;
Integrated Security=True; User Id = sa; Password = 123”;
cmd.Connection = cnn;
cmd.CommandText = “SELECT COUNT(*) FROM HoaDon”;
cmd.CommandType = CommandType.Text;
cnn.Open();
//Đếm số hóa đơn
int count = (int)cmd.ExecuteScalar();
cnn.Close();
18
Command
SqlConnection cnn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
cnn.ConnectionString = “…”;
cmd.Connection = cnn;
cmd.CommandText =
“INSERT INTO LoaiSanPham(MaLoai, TenLoai)” +
“VALUES(1, “Quần áo”)”;
cmd.CommandType = CommandType.Text;
cnn.Open();
//Thực thi câu truy vấn Insert
cmd.ExecuteNonQuery();
cnn.Close();
19
Command
SqlConnection cnn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
cnn.ConnectionString = “…”;
cmd.Connection = cnn;
cmd.CommandText =“Select MaSP, TenSP From SanPham”;
cmd.CommandType = CommandType.Text;
cnn.Open();
// Thực thi câu truy vấn Select
SqlDataReader reader= cmd.ExecuteReader();
//Duyệt trên kết quả reader
while (reader.Read()) {
Console.WriteLine(“San pham: {0} – {1}”, reader.getString(0),
reader.getString(1));
}
cnn.Close();

20
Command - 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: @[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.

21
Command - Parameter
❖Tham số hóa:
cmd.CommandText =
“SELECT * FROM SanPham WHERE TenSP= @ten”;

cmd.CommandText =
“INSERT INTO SanPham(MaSP, TenSP, SoLuong)
VALUES(@ma, @ten, @soluong)”;

22
Command - Parameter
❖Tạo các parameter cho Command:
cmd.Parameters.Add(“@ma”, SqlDbType.Int);
cmd.Parameters.Add(“@ten”, SqlDbType.NVarChar);
cmd.Parameters.Add(“@soluong”,SqlDbType.Float);

23
Command - Parameter
❖Đặt giá trị cho các parameter:
cmd.Parameters[“@ma”] = sp.MaSP;
cmd.Parameters[“@ten”] = sp.TenSP;
cmd.Parameters[“@soluong”] = sp.SoLuong;
cmd.ExecuteNonQuery();

24
DataAdapter
 Dùng để lấy dữ liệu từ dữ liệu nguồn vào DataSet
và để 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

25
DataAdapter
 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.

26
DataAdapter

SqlConnection cnn = new SqlConnection(“…”);


cnn.Open();
SqlCommand cmd = new SqlCommand( “Select
MaSP, TenSP from SanPham”, cnn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, “sp” ); // Đổ kết quả vào DataSet
cnn.Close();

27
DataSet

❖ DataSet là cơ sở dữ liệu được lưu trữ trong bộ


nhớ chính (in-memory database).
❖ Cơ chế không kết nối

28
DataSet

29
DataSet

30
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.

31
DataColumn
 DataColumn thể hiện một cột trong bảng.
 Các thuộc tính và phương thức:
 ColumnName: tên cột.
 DataType: kiểu dữ liệu cột.

32
DataRow
 DataRow thể hiện một mẫu tin trong bảng.
 Các thuộc tính và phương thức:
 RowState: trạng thái của mẫu tin (Added, Modified,
Deleted, Unchanged, Detach).
 Toán tử [i]: truy xuất đến cột i của mẫu tin.
 Delete(): đánh dấu xóa mẫu tin.

33
DataTable
DataTable table = new DataTable(“SanPham”);
table.Columns.Add(new DataColumn(“MaSP”
Type.GetType(“string”));
table.Columns.Add(new DataColumn(“TenSP”,
Type.GetType(“string”));
table.PrimaryKey = new DataColumn[] {
table.Columns[“MaSP”] };
DataRow row = table.NewRow();
row[“MaSP”] = “123”;
row[“TenSP”] = “Mì ăn liền Hảo Hảo”;
table.Rows.Add(row);
34
DataTable
SqlDataAdapter da = new SqlDataAdapter(
“SELECT * FROM SanPham”,“ConnectionString…”);
SqlCommandBuilder sqlcombd =
new SqlCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds);
foreach (DataRow row in ds.Tables[0].Rows)
row[“TenSP”] = “Mì ăn liền Aone”;
da.Update(ds); // Cập nhật vào CSDL

35
DataTable
SqlDataAdapter da = new SqlDataAdapter(
“SELECT * FROM SanPham”, “ConnectionString…”);
SqlCommandBuilder sqlcombd =
new SqlCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds);
foreach (DataRow row in ds.Tables[0].Rows)
if (row[“MaSP”] == “245”)
row.Delete();
da.Update(ds);

36
DataGridView
 DataGirdView: Thể hiện bảng dữ liệu
 DataSource: Chỉ nơi cung cấp dữ liệu (là DataSet
hay DataTable, hay DataView).
 DataMember: Xác định cụ thể thành phần bên trong
DataSource dùng cho thể hiện.

37
DataGridView
DataSet ds = new DataSet();
SqlConnection cnn = new SqlConnection(“…”);
cnn.Open();
SqlCommand cmd = new SqlCommand(
"select * from SanPham", cnn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds, “SP");
cnn.Close();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = “SP";

38
ComboBox
 ComboBox: Thể hiện 1 trường dữ liệu cho lựa
chọn
 DataSource: Chỉ nơi cung cấp dữ liệu
 DisplayMember: Chỉ trường thể hiện dữ liệu trên
ComboBox.
 ValueMember: Chỉ trường dữ liệu mà sẽ cho ra
giá trị khi người dùng lựa chọn trên combobox.

39
ComboBox
SqlConnection cnn = new SqlConnection(“...”);
cnn.Open();
SqlCommand cmd = new SqlCommand(
"select * from LoaiSanPham", cnn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds, “loai");
cnn.Close();
comboBox1.DataSource = ds;
comboBox1.DisplayMember = “TenLoai";
comboBox1.ValueMember = "MaLoai";

40
Thực hành

41
Thực hành

42
Bài 1: Đưa dữ liệu lên ListBox

43
Bài 2: Đưa dữ liệu lên ComboBox

44
Bài 3: Đưa dữ liệu lên DataGridView

45
Bài 4: Tìm kiếm sản phẩm

46
Bài 5: Lọc sản phẩm theo loại

47
Bài 6: TreeView và DataGridView

48
Bài 7: Phân trang dữ liệu

49
Bài 8: Thêm, sửa, xóa dữ liệu

50

You might also like