Bài 2 Kết nối cơ sở dữ liệu và đọc dữ liệu - Công nghệ ADO.NET với C#


ADO.NET là gì ? Là mô hình cho phép người lập trình thao tác với nhiều loại cơ sở dữ liệu theo cùng một cách CSDL có thể là SQL Server, MS Access, Oracle, …


  • ADO.NET là gì?
  • Quy trình kết nối cơ sở dữ liệu và đọc dữ liệu
  • Connection Pooling là gì?

ADO.NET là gì ?

  • Là mô hình cho phép người lập trình thao tác với nhiều loại cơ sở dữ liệu theo cùng một cách
  • CSDL có thể là SQL Server, MS Access, Oracle, …
  • Ứng với mỗi loại CSDL sẽ là các .NET Framework Data Provider thích hợp
  • Bao gồm các đối tượng của các lớp Data Provider được sử dụng để thao tác CSDL

net framework data provider ado.net

.NET Framework Data Provider for Microsoft SQL Server

  • Tối ưu khi kết nối với SQL Server (từ phiên bản 7.0)
  • Kết nối trực tiếp không thông qua ODBC hoặc OLE DB
  • Các lớp cung cấp thuộc System.Data.SqlClient

.NET Framework Data Provider for OLE DB

  • Sử dụng native OLE DB
  • SQLOLEDB provider
  • MSDAORA provider
  • Microsoft.Jet.OLEDB.4.0 provider
  • Các lớp cung cấp thuộc System.Data.OleDb

.NET Framework Data Provider for ODBC

  • Sử dụng native ODBC Driver Manager
  • SQL Server driver
  • Microsoft ODBC for Oracle driver
  • Microsoft Access driver
  • Các lớp cung cấp thuộc System.Data.Odbc

.NET Framework Data Provider for Oracle

  • Kết nối Oracle Data Source thông qua Oracle client connectivity software (từ phiên bản 8.1.7)
  • SQL Server driver
  • Microsoft ODBC for Oracle driver
  • Microsoft Access driver
  • Các lớp cung cấp thuộc System.Data.OracleClient

Các lớp Data Provider

  • IDbConnection Interface
    • Dùng để tạo một kết nối (connection) đến CSDL Được cài đặt cho các lớp của các Data Provider
    • Ví dụ: với Data Provider for SQL Server thì sử dụng lớp SqlConnection
  • IDbCommand Interface
    • Dùng để thực hiện câu lệnh, có thể truyền tham số, có thể nhận kết quả trả về Được cài đặt cho các lớp của các Data Provider
    • Ví dụ: với Data Provider for SQL Server thì sử dụng lớp SqlCommand
  • IDataReader Interface
    • Dùng để đọc dữ liệu theo cách forward-only và read-only
  • IDataAdapter Interface
    • Dùng để đọc dữ liệu từ CSDL và lưu trong DataSet
    • DataSet là một CSDL thu nhỏ được đặt trong bộ nhớ của máy client
    • Người dùng có thể thao tác trên DataSet và ghi lại các thay đổi trở lại CSDL
    • Dữ liệu đọc và lưu trong DataSet cũng có thể là dữ liệu XML

Quy trình kết nối đến CSDL

  • Tạo đối tượng Connection và xác định chuỗi kết nối (Connection String)
  • Tạo đối tượng Command và xác định câu lệnh SQL
  • Mở đối tượng Connection (Open)
  • Thực hiện câu lệnh SQL và xử lý kết quả (Execute)
  • Đóng đối tượng Connection (Close)

Tạo đối tượng Connection

Thông tin chuỗi kết nối

  • Tên Server
  • Tên Database
  • Kiểu đăng nhập (Windows hoặc SQL Server)
  • Tên user
  • Mật khẩu

Khai báo và khởi tạo

using System.Data.SqlClient;

//Tạo chuỗi thông tin kết nối đến AdventureWorks
string chuoi = "Server=(local);Database=AdventureWorks;Integrated Security=SSPI";
//Tạo đối tượng kết nối
SqlConnection ket_noi = new SqlConnection(chuoi);

Tạo đối tượng Command

Khai báo và khởi tạo

using System.Data.SqlClient;

//Tạo chuỗi lệnh
string lenh = "select count(*) from production.product";
//Tạo đối tượng bộ lệnh
SqlCommand bo_lenh = new SqlCommand(lenh, ket_noi);

Thực hiện câu lệnh

  • Mở đối tượng Connection
  • Thực hiện câu lệnh và xử lý kết quả
  • Đóng đối tượng Connection
ket_noi.Open();
int n = (int)bo_lenh.ExecuteScalar();
ket_noi.Close();
TextBox1.Text = "Số sản phẩm : " + n.ToString();

3. Connection Pooling là gì?

  • Pooling cho phép sử dụng lại các connection để mang lại hiệu quả trong việc kết nối đến CSDL
    • Mỗi Data Provider sẽ cài đặt connection pooling theo cách riêng
    • Nếu kết nối thực hiện đã có trong pool thì sẽ được sử dụng lại
    • Nếu kết nối thực hiện chưa có trong pool thì sẽ được tạo mới
  • Hoạt động Connection Pooling của Data Provider for SQL Server
    • Dựa trên thông tin của chuỗi kết nối, thuộc tính Pooling có giá trị là True hoặc False (mặc định là True)
    • Nếu thuộc tính Pooling có giá trị là True thì có thể sử dụng lại kết nối từ pool
    • Nếu thuộc tính Pooling có giá trị là False thì kết nối sẽ được tạo mới

Bài viết tiếp theo

Chia sẽ bài viết :