[ADO.NET Tutorial] Lesson 02: Đối tượng SqlConnection

Lesson này sẽ mô tả về đối tượng SqlConnection và cách để kết nối tới database. Qua đó, bạn sẽ hiểu được các kiến thức về tạo, sử dụng và quản lý các đối tượng connection sao cho hiệu quả.

Giới thiệu

Điều đầu tiên bạn cần là tạo một kết nối để xác định database nào cần làm việc. Nó sẽ quản lý tất cả các logic ở mức thấp kết hợp với các giao thức đặc trưng của database. Công việc mà bạn cần làm chỉ là tạo một đối tượng connection, mở kết nối và đóng kết nối sau khi đã hoàn thành công việc.

Mặc dù làm việc với connection rất đơn giản trong ADO.NET, bạn vẫn cần hiểu về connection để có một quyết định đúng khi viết mã lệnh truy xuất dữ liệu. Phải hiểu rằng mỗi kết nối là một tài nguyên quan trọng. Nếu bạn chỉ có một ứng dụng làm việc với database trong máy, bạn có thể không cần quan tâm đến nó. Tuy nhiên, với các ứng dụng doanh nghiệp, hàng trăm người dùng khắp công ty kết nối tới cùng một database. Mỗi kết nối  giống như một đường đây và số lượng của chúng nằm trong mức giới hạn. Trường hợp bạn có thể thấy rõ hơn là  một web site được truy cập với hàng trăm nghìn lượt mỗi ngày. Ứng dụng sẽ bắt và giữ các kết nối, điều này có thể gây ra những ảnh hưởng nghiêm trọng đến hiệu suất và vận hành của ứng dụng.

Mô hình sau cho ta thấy cách mà SqlConnection được sử dụng bởi các đối tượng ADO.NET khác:

Tạo một đối tượng SqlConnection

Một đối tượng SqlConnection giống như các đối tượng khác trong C#. Bạn chỉ cần khai báo một thể hiện của SqlConnection, như dưới đây:

SqlConnection conn = new SqlConnection(

“Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI”);

Đối tượng SqlConnection trên sử dụng constructor với một tham số kiểu string. Tham số này được gọi là chuỗi kết nối (connection string). Table 1 mô tả các phần của một connection string.

Table 1.  ADO.NET Connection String chứa các cặp key/value để xác định cách tạo một kết nối đến database.  Chúng bao gồm vị trí, tên của database và và chế độ bảo mật.

Connection String Parameter Name

Description

Data Source

Identifies the server. Could be local machine, machine domain name, or IP Address.

Initial Catalog

Database name.

Integrated Security

Set to SSPI to make connection with user’s Windows login

User ID

Name of user configured in SQL Server.

Password

Password matching SQL Server User ID.

 

Integrated Security sẽ bảo mật khi bạn làm việc trên một máy đơn. Tuy nhiên, bạn sẽ thường xuyên cần phải định rõ mức bảo mật dựa trên SQL Server User ID với quyền hạn được xác định cho ứng dụng bạn sử dụng. Đoạn mã sau sử dụng một connection string với tham số User ID và Password:

SqlConnection conn = new SqlConnection(

“Data Source=DatabaseServer;Initial Catalog=Northwind;User ID=YourUserID;Password=YourPassword”);

Lưu ý Data Source được gán cho DatabaseServer để chỉ ra rằng bạn có thể định danh một database trên một máy khác, thông qua mạng LAN, hoặc qua Internet. Ngoài ra, User ID và Password được thay thế cho tham số Integrated Security.

Sử dụng SqlConnection

Mục đích của việc tạo một đối tượng SqlConnection là để các mã lệnh ADO.NET khác có thể làm việc được với database. Các đối tượng ADO.NET khác, như SqlCommand và SqlDataAdapter dùng một connection như một tham số. Quá trình sử dụng SqlConnection gồm các bước sau:

Tạo một SqlConnection.

Mở connection.

Truyền connection  cho các đối tượng ADO.NET khác.

Thực hiện các thao tác database với các đối tượng ADO.NET này.

Đóng connection.

Chúng ta đã thấy cách để tạo một đối tượng SqlConnection. Những bước còn lại, mở, truyền, sử dụng và đóng connection được thể hiện trong Listing 1.

Listing 1.  Using a SqlConnection

using System;

using System.Data;

using System.Data.SqlClient;

/// <summary>

/// Demonstrates how to work with SqlConnection objects

/// </summary>

class SqlConnectionDemo

{

    static void Main()

    {

       // 1. Instantiate the connection

        SqlConnection conn = new SqlConnection(

            "Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");

        SqlDataReader rdr = null;

        try

        {

            // 2. Open the connection

            conn.Open()

            // 3. Pass the connection to a command object

            SqlCommand cmd = new SqlCommand("select * from Customers", conn);

            //

            // 4. Use the connection

            //

            // get query results

            rdr = cmd.ExecuteReader();

            // print the CustomerID of each record

            while (rdr.Read())

            {

                Console.WriteLine(rdr[0]);

            }

        }

        finally

        {

            // close the reader

            if (rdr != null)

            {

                rdr.Close();

            {

            // 5. Close the connection

            if (conn != null)

            {

                conn.Close();

            }

        }

    }

}

Như đã thấy trong Listing 1, bạn mở một connection bằng cách gọi phương thức Open của đối tượng SqlConnection, conn. Bất kì thao tác nào thực hiện với SqlCommand cũng sử dụng connection này.

Mã lệnh sử dụng connection là một SqlCommand – đối tượng thực hiện truy vấn đến bảng Customers trong database. Tập kết quả trả về dưới dạng một SqlDataReader và vòng lặp while đọc cột đầu tiên của mỗi dòng trong tập kết quả này, chính là cột CustomerID. Chúng ta sẽ thảo luận về đối tượng SqlCommand và SqlDataReader trong lesson sau. Hiện tại, điều quan trọng là bạn cần hiểu rằng các đối tượng sử dụng SqlConnection để biết được database nào sẽ được truy xuất.

Khi bạn sử dụng xong đối tượng connection, bạn phải đóng nó. Thực hiện thất bại có thể gây ra các hậu quả nghiêm trọng đến hiệu suất và khả năng của ứng dụng. Như bạn thấy trong Listing 1: phương thức Close() được gọi trong một khối finally và chúng ta đảm bảo rằng connection sẽ khác null trước khi đóng nó.

Lưu ý rằng chúng ta bao đoạn mã ADO.NET trong một khối try/finally. Khối finally giúp đảm bảo rằng một phần mã lệnh sẽ được thực thi, bất kể một ngoại lệ có xảy ra hay không. Bởi vì các connection là một tài nguyên hệ thống ít ỏi, bạn sẽ cần phải chắc chắn rằng chúng được đóng trong khổi finally.

Một điểm bạn nên làm khi đóng connection là đảm bảo connection khác null. Nếu có sai sót xảy ra khi tạo connection, nó sẽ là null và bạn không nên cố đóng một connection không hợp lệ, điều này sẽ gây ra một ngoại lệ.

Ví dụ này cho thấy cách để dùng đối tượng SqlConnection với SqlDataReader – đối tượng yêu cầu bạn phải thực hiện một lệnh đóng connection rõ ràng. Tuy nhiên, khi dùng mô hình dữ liệu ngắt kết nối, bạn không cần phải mở và đóng connection thủ công. Chúng ta sẽ xem xét về vấn đề này trong lesson sau khi tìm hiểu về đối tượng SqlDataAdapter.

Tổng kết

Các đối tượng SqlConnection cho phép các đối tượng ADO.NET khác biết database nào sẽ được truy xuất và cách để tạo một connection. Chúng được tạo bằng cách truyền một connection string với một danh sách các cặp key/value để định nghĩa connection. Các bước mà bạn quản lý một connection là tạo, mở, truyền (cho các đối tượng ADO.NET khác), sử dụng và đóng. Hãy đảm bảo đóng connection một cách chính xác khi bạn đã làm việc xong với nó để chắc chắn rằng bạn không có một sự rò rỉ tài nguyên kết nối.

Tôi hi vọng bạn thích lesson này và mời bạn xem bài tiếp theo trong series này, Lesson 03: Đối tượng SqlCommand.

Tags: