Você está na página 1de 5

ADO.

Net là tập hợp các thư viện đối tượng cho phép bạn tương tác với các data source. Thông thường
data source là database, hoặc là các dạng text file, excel, xml….

Data Providers

Như đã biết thì hiệnt tại có khá nhiều hệ quản trị CSDL khác nhau, ADO.Net không thể cho chúng ta giao
tiếp với chúng chỉ với một thư viện đối tượng được, mà phải theo nguyên tắc hệ quản trị csdl nào thì
phải dùng giao thức đấy.

ADO.Net cho phép chúng ta giao tiếp với data source theo một cách thống nhất, nhưng phải tùy loại
data source ta phải dùng các thư viện khác nhau. Những thư viện này được gọi là Data Provider.

Provider API
Data Source Description
Name prefix
ODBC Data Data Sources with an ODBC interface.  Normally older
Odbc
Provider data bases.
OleDb Data Data Sources that expose an OleDb interface, i.e.
OleDb
Provider Access or Excel.
Oracle Data
Oracle For Oracle Databases.
Provider
SQL Data
Sql For interacting with Microsoft SQL Server.
Provider
Borland Data Generic access to many databases such as Interbase,
Bdp
Provider SQL Server, IBM DB2, and Oracle.

ADO.Net Objects

ADO.NET cung cấp cho ta khá nhiều đối tượng để làm việc với data. Ở toturial này sẽ chỉ giới thiệu về
SQL DataProvider, những Data Provider khác có thể sử dụng tương tự.

SqlConnection Object.

Để làm việc với data, điều trước tiên là phải kết nối với chúng, một kết nối với chúng cần có những
thông tin như database server, database name, user name, password và các tham số khác. Ví dụ
Connection Object được sử dụng bởi command Object để nó biết thực thi câu lệnh với database nào.

SqlCommand Object

Làm việc với database nghĩa là bạn thực thi các câu lệnh. Việc này được thực thi với command object.
Bạn sử dụng sqlcommand object để gửi câu lệnh sql đến database. Sqlcommand object cần biết thực thi
câu lệnh trên database nào nhờ vào sử dụng sqlconnection object. Bạn có thể thực thi một câu lệnh độc
lập, hoặc có thể kêt nối nó với SqlDataAdapter để thực hiện một tập hợp các câu lệnh.

SqlDataReader Object

Đôi khi bạn chỉ cần lấy dữ liệu từ database thôi, thì sqldatareader cho phép bạn thực hiện điều đó với
câu lệnh sql bởi sử dụng sqlcommand object. Việc sử dụng sqldatareader có những lợi điểm đó là về tốc
độ đọc dữ liệu của nó. Tuy nhiên nó chỉ tốt về mặt tốt độ, còn nếu bạn muốn thao tác nhiều hơn với
database thì dataset là một đối tượng tốt hơn để bạn làm việc.
DataSet Object

Đây là một đối tượng được quản lý bởi bộ nhớ Ram của máy thay vì như trên ổ cứng đối với hệ quản trị
csdl. Điều này có nghĩa là database của bạn sẽ được copy vào bộ nhớ ram. Vì thế, dataset object là tập
hợp chứa các cột, dòng giống hệt như trong database của hệ quản trị csdl. Thậm chí bạn có thể định
nghĩa ra các relationship giữa các bảng. Nó được thiết kế để tối ưu hóa việc quản lý bộ nhớ, giúp ngắt
kết nối với hệ quản trị csdl. Đây là đối tượng không phụ thuộc vào data provider, nghĩa là data từ data
provider nào cũng dùng được nó.

SqlDataAdapter Object

Đôi khi bạn chỉ cần thực hiện đọc dữ liệu là chính, và hiếm khi thực hiện thay đổi dữ liệu. Một vài trường
hợp bạn cần caching data để giúp giảm thiểu việc kết nối đến database. Thì SqlDataAdapter giúp bạn
thực hiện điều đó dễ dàng hơn trong chế độ ngắt kết nối.

SqlDataAdapter có reference đến đối tượng sqlconnection để có thể giúp cho việc mở, ngắt kết nối tự
động. Hơn nữa, nó cũng chứa đối tượng sqlcommand để giúp thực hiện các câu lệnh Select, Insert,
Update, và Delete.

SqlDatadapter sẽ được cài đặt cho mỗi table trong DataSet và nó sẽ tương tác với database cho bạn.
The SqlConnection Object
Điều đầu tiên để có thể thao tác, làm việc với database trong ado.net là bạn cần phải tạo được kết nối.
Nó sẽ làm việc với các phần logic cấp thấp của database protocol thay cho ta. Connection object sẽ khiến
cho công việc của bạn dễ dàng hơn, bạn chỉ cần làm những việc như sau, tạo một đối tượng connection
object, mở kết nối, và đóng kết nối khi hoàn tất công việc của bạn.

Tạo một Connection Object.

SqlConnection là một object, vì thế nó cũng tương tự như các đối tượng khác trong c#. Để sử dụng , hầu
như bạn chỉ cần khai báo một đối tượng SqlConnection mới:

SqlConnection conn = new SqlConnection(


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

Ở đoạn code trên, bạn tạo một đối tượng sqlconnection mới sử dụng contructor với một tham số String,
tham số này được gọi là Connection String.

Dưới đây là bảng chi tiết miêu tả Connection String.

Connection String
Description
Parameter Name
Identifies the server.  Could be local machine,
Data Source
machine domain name, or IP Address.
Initial Catalog Database name.
Set to SSPI to make connection with user's
Integrated Security
Windows login
User ID Name of user configured in SQL Server.
Password Password matching SQL Server User ID.

Lưu ý: với tham số Intergrated Security là được sử dụng khi bạn kết nối database trên một máy đơn.
Mặc dù vậy bạn nên sử dụng User ID với các phân quyền được thiết lập trong Sql Server.

SqlConnection conn = new SqlConnection(


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

Sử dụng SqlConnection

Mục đích của việc tạo ra sqlconnection là để các đối tượng khác trong ADO.Net có thể sử dụng nó.

Các đối tượng khác đó là như SqlCommand, SqlDataAdapter cần một đối tượng SqlConnection để biết
nó cần thao tác với Database nào, thường thì các bước như sau.

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


2. Mở kết nối.
3. Truyền đối tượng SqlConnection vào các đối tượng ADO.net khác.
4. Thực hiện các thao tác với Database.
5. Đóng kết nối.
Code Ví dụ:
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();
            }
        }
    }
}
The SqlCommand Object
Sau khi bạn tạo được một Connection đến Database, mở kết nối, thì bạn có thể dùng SqlCommand
object để có thể tương tác với database, ví dụ như các lệnh select, insert, modify và delete trên dữ liệu.

SqlCommand object còn được sử dụng để hổ trợ việc đóng kết nối sau khi thao tác dữ liệu, như trong
phần này sẽ không đề cập đến vấn đề đó, phần này chỉ đề cập đến việc sử dụng độc lập.

Ở phần sau sẽ đề cập đến đối tượng SqlDataAdapter , đối tượng sử dụng SqlCommand để hổ trợ việc
đóng kết nối.

Tạo SqlCommand Object

Dưới đây là ví dụ về tạo một SqlCommand Object:

SqlCommand cmd = new SqlCommand("select CategoryName from Categories", conn);

Ở ví dụ trên, ta tạo đối tượng SqlCommand sử dụng construtor với 2 tham số, tham số thứ nhất là câu
lệnh Sql bạn muốn thực thi, tham số thứ 2 là SqlConnection object.

SqlCommand còn có một vài Constructor khác.

Querying Data
Đôi khi bạn cần lấy dữ liệu ra bằng câu Sql, SqlCommand cung cấp cho bạn phương thức để lấy dữ liệu
ra. Phương thức đó là ExecuteReader, phương thức này trả về đối tượng SqlDataReader, đối tượng này
cho phép lấy dữ liệu theo cách ưu tiên tốc độ.

// 1. Instantiate a new command with a query and connection


SqlCommand cmd = new SqlCommand("select CategoryName from Categories", conn);

// 2. Call Execute reader to get query results


SqlDataReader rdr = cmd.ExecuteReader();

Você também pode gostar