Giới thiệu
ADO.NET (ActiveX Data Objects for .NET) là một tập hợp các công nghệ trong Microsoft .NET Framework được thiết kế để làm việc với dữ liệu trong môi trường .NET. ADO.NET cung cấp một mô hình lập trình cho truy cập và quản lý dữ liệu từ nhiều nguồn khác nhau, chẳng hạn như cơ sở dữ liệu SQL Server, Oracle, MySQL, và các nguồn dữ liệu khác.
ADO.NET chủ yếu được sử dụng để thực hiện các thao tác thường xuyên liên quan đến cơ sở dữ liệu, bao gồm:
- Kết nối (Connection): ADO.NET cung cấp lớp SqlConnection để thiết lập kết nối với cơ sở dữ liệu. Kết nối là cầu nối giữa ứng dụng và cơ sở dữ liệu.
- Command: ADO.NET sử dụng các lớp SqlCommand, SqlDataAdapter, và SqlDataReader để thực hiện các câu truy vấn SQL, stored procedures, và thao tác khác đối với cơ sở dữ liệu.
- DataReader: SqlDataReader là một cơ chế để đọc dữ liệu từ cơ sở dữ liệu một cách tuần tự và hiệu quả, thích hợp cho việc đọc dữ liệu theo hàng.
- DataAdapter: SqlDataAdapter là một thành phần quan trọng trong ADO.NET, giúp điều khiển luồng dữ liệu giữa DataSet và cơ sở dữ liệu.
- DataSet và DataTable: DataSet là một cấu trúc dữ liệu chứa các đối tượng DataTable và cung cấp khả năng lưu trữ dữ liệu trong bộ nhớ. DataTable thì đại diện cho một bảng dữ liệu.
Stored Procedure là gì
Stored Procedure (thường được viết tắt là SP) là một khối mã SQL có thể được lưu trữ và tái sử dụng trong cơ sở dữ liệu. Stored Procedure thường được tạo và lưu trữ trước trong hệ thống quản lý cơ sở dữ liệu, và sau đó có thể được gọi và thực thi từ ứng dụng hoặc các truy vấn SQL khác.
Ví dụ
CREATE PROCEDURE GetEmployeeByName
@EmployeeName NVARCHAR(50)
AS
BEGIN
SELECT * FROM Employees
WHERE EmployeeName = @EmployeeName;
END;
Thực thi Stored Procedure trong Azure Data Studio:
EXEC GetEmployeeByName @EmployeeName = N'Robert Downey Jr.'
Thực thi Stored Procedure
Để sử dụng ADO.NET để gọi và lấy dữ liệu từ một Stored Procedure trong C#, bạn cần sử dụng các đối tượng như SqlConnection, SqlCommand, và SqlDataReader
Connection string là một chuỗi kết nối chứa thông tin cần thiết để kết nối ứng dụng của bạn với cơ sở dữ liệu. Bao gồm
- Data Source (hoặc Server, Address, Addr, Network Address)
- Initial Catalog (hoặc Database)
- Integrated Security (hoặc Trusted_Connection): Xác định cách xác thực. Nếu giá trị là true, connection sẽ sử dụng xác thực Windows (được gọi là xác thực tích hợp). Nếu giá trị là false, connection sẽ sử dụng xác thực SQL Server.
- User ID và Password: Khi sử dụng xác thực SQL Server, bạn cần cung cấp tên người dùng (User ID) và mật khẩu (Password) để kết nối.
- MultipleActiveResultSets: Cho phép một kết nối mở nhiều bảng kết quả (result sets) đồng thời. Giá trị mặc định là false.
- Connect Timeout: Xác định thời gian chờ (số giây) trước khi quá trình kết nối bị hủy bỏ.
- Encrypt (hoặc TrustServerCertificate): Xác định liệu kết nối có sử dụng SSL/TLS để mã hóa dữ liệu hay không.
- Application Name: Xác định tên của ứng dụng khi nó kết nối đến cơ sở dữ liệu.
SqlConnection conn = new SqlConnection(
"Data Source=DatabaseServer;Initial Catalog=Northwind;User ID=YourUserID;Password=YourPassword;MultipleActiveResultSets=true;Connect Timeout=60;Encrypt=true;Application Name=nhatkyhoctap;");
SqlDataReader
Nhiều thao tác dữ liệu đòi hỏi bạn chỉ lấy một luồng dữ liệu để đọc. Đối tượng data reader cho phép bạn lấy được kết quả của một câu lệnh SELECT từ một đối tượng command. Để tăng hiệu suất, dữ liệu trả về từ một data reader là một luồng dữ liệu fast forward-only. Có nghĩa là bạn chỉ có thể lấy dữ liệu từ luồng theo một thứ tự nhất định. Mặc dù điều này có lợi về mặt tốc độ, nhưng nếu bạn cần phải thao tác dữ liệu, thì một DataSet sẽ là một đối tượng tốt hơn để làm việc.
DataSet
Đối tượng DataSet là một thể hiện của dữ liệu trong bộ nhớ. Chúng chứa nhiều đối tượng DataTable, bên trong DataTable lại có nhiều column và row, giống như các database table thông thường. Bạn thậm chí có thể định nghĩa dữ liệu giữa các table để tạo các quan hệ parent-child. DataSet được thiết kế đặc biệt để giúp quản lý dữ liệu trong bộ nhớ và để hỗ trợ các thao tác không cần kết nối (disconnected) trên dữ liệu. DataSet là một đối tượng được dùng bởi tất cả Data Provider, đó là lý do tại sao nó không có một Data Provider prefix trong tên gọi.
Tạo Project sử dụng ADO.NET
Tạo project Console Application sử dụng .NET 8. Sau đó cài đặt package
Microsoft.Data.SqlClient
Thực thi đoạn code sau
string connectionString = "Server=.;Initial Catalog=nhatkyhoctap;Persist Security Info=False;User ID=sa;Password=1111111;MultipleActiveResultSets=true;Connection Timeout=60;Encrypt=False;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("sp_SPName", connection))
{
command.CommandType = System.Data.CommandType.StoredProcedure;
// Thêm các tham số cho stored procedure (nếu có)
command.Parameters.AddWithValue("@name", "Geogre Washington");
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
var resultColumn1 = reader[0].ToString();
var resultColumn2 = reader[1].ToString();
Console.WriteLine($"{resultColumn1}, {resultColumn2}");
}
}
}
}
Nhận xét
Đăng nhận xét