Trang chủ » Khác » ADO.NET – Bài 2 : Đối tượng Connection và Command

ADO.NET – Bài 2 : Đối tượng Connection và Command


Đối tượng Connection và Command

Trước đó Bài 1 : Giới thiệu
1) .NET Data Providers.

2) Đối tượng Connection.
3) Đối tượng Command.
4) Về khái niệm Connection Pooling.
5) Xử lý các ngoại lệ ADO.NET.

1) .NET Data Providers
.NET Data Providers là một tập các đối tượng phục vụ cho việc trao đổi dữ liệu giữa Data Source (dữ liệu nguồn) và đối tượng DataSet. Nó chia ra gồm 2 loại tập đối tượng : 1 tập các đối tượng chịu trách nhiệm quản lý các kết nối (connections) tới DataSource (dữ liệu nguồn) và 1 tập các đối tượng còn lại chịu trách nhiệm xử lý dữ liệu.
ADO.NET cung cấp 2 loại .NET Data Providers đó là SQL Server .NET Data Provider và OLE DB .NET Data Provider. SQL Server .NET Data Provider sử dụng truy xuất Database SQL Server 7.0 trở về sau. Còn OLE DB .NET Data Provider sử dụng cho phiên bản 6.5 trở về trước và các loại Database khác (vd như Access, Oracle…). SQL Server .NET Data Provider hoạt động hiệu quả hơn bởi vì nó thao tác trực tiếp với SQL Server mà không cần phải thông qua OLE DB Provider.
Để sử dụng 2 loại .NET Data Provider này ta phải import 2 Namespace : System.Data.SqlClient cho SQL Server .NET Data Provider và System.Data.OleDb cho OLE DB Data Provider.

2) Đối tượng Connection
Đối tượng Connection là đối tượng chịu trách nhiệm quản lý kết nối tới nguồn dữ liệu (DataSource). Có 2 dạng Connection tương ứng với 2 kiểu dữ liệu SQL Server và OLE DB đó là : SqlConnection và OleDbConnection. Cả 2 đối tượng này đều implement từ interface IDbConnection. Bằng cách sử dụng Interface IDbConnection, các nhà cung cấp dịch vụ Database khác nhau có thể tạo ra các cài đặt phù hợp cho Database riêng của họ.
Đối tượng Connection của ADO.NET chỉ nhận một tham số đầu vào là chuỗi kết nối (connection string). Trong chuỗi kết nối, các thông số được cách nhau bằng dấu “;”, connection string có các thông số sau :
– Provider : Tên nhà cung cấp Database, đối với OLEDB cần khai báo là SQLOLEDB. Đối với SQL Server thì không thuộc tính này.
– DataSource (hoặc Server) : tên/địa chỉ database server cần kết nối tới.
– Initial catalog (hoặc Database) : tên của Database cần truy xuất.
– Uid : username để đăng nhập vào Database Server.
– Pwd : password để đăng nhập vào Database Server.
Sau đây là vd về 1 chuỗi kết nối đối với Database dạng OLE DB :

  • Provider=SQLOLEDB.1;Data Source=MySQL; Initial Catalog=NorthWind; uid=sa; pwd=sa;

Còn đây là vd về 1 chuỗi kết nối đối với Database dạng SQL Server:

  • Server=CSC;database=Northwind;uid=sa;pwd=sa;

Sau đây là các thuộc tính, phương thức, sự kiện thông dụng của cả SqlConnection và OleDbConnection :
Thuộc tính
– ConnectionString : thuộc tính thiết lập / lấy chuỗi kết nối.
– ConnectionTimeout: thuộc tính thiết lập / lấy thời gian chờ trong khi truy xuất vào database. Khi truy xuất vào Database, chương trình sẽ chờ đúng khoảng thời gian này nếu chờ qua khoảng thời gian này mà vẫn không kết nối được vào database thì chương trình sẽ báo lỗi.
– Database : thuộc tính thiết lập/ lấy tên database của đối tượng connection hiện thời.
– DataSource : thuộc tính thiết lập/lấy tên của database server của đối tượng connection hiện thời.
– State : Lấy trạng thái hiện thời của Connection có các trạng thái sau: Connecting, Broken, Open, Closed, Executing, Fetching.
Phương thức
– BeginTransaction : sử dụng cho trường hợp xử lý giao tác của ứng dụng. Việc xử lý giao tác rất có lợi trong khi xử lý dữ liệu từ database vì có lúc trong khi xử lý dữ liệu gặp lỗi thì có thể thực hiện câu lệnh như Rollback hay trong lúc thao tác cũng có thể thực hiện được các giao tác chính như trên SQL Server như Commit…
– Close : đóng 1 connection.
– Open : Mở 1 connection với các thuộc tính hiện hành.
Sự kiện
– InfoMessage : Xảy ra khi provider gửi ra 1 lời cảnh cáo hay thông tin.
– StateChange : Xảy ra khi trạng thái của connection thay đổi.
Sau đây là đoạn source code sử dụng đối tượng Connection để kết nối vào cở sở dữ liệu :

  • Dim connString As String = "server=CSC;database=Northwind;uid=sa;pwd=sa"
    Dim conn As SqlConnection = New SqlConnection(connString)
    ‘mo ket noi
    conn.Open()
    ‘Thuc hien cac thao tac du lieu
    ‘dong ket noi
    conn.Close()

3) Đối tượng Command
Sau khi chúng ta đã kết nối vào nguồn dữ liệu, chúng ta cần phải thực hiện thao tác các dữ liệu. Để thao tác được với các dữ liệu chúng ta phải dùng đối tượng Command. Đối tượng Command là đối tượng rất “đa năng”, nó vừa xử lý được sqlserver stored procedures vừa xử lý được các giao tác (transaction).
Tương tự như đối tượng Connection, đối tượng Command cũng chia ra làm 2 loại tuỳ theo nguồn dữ liệu : SqlCommand (cho SQL Server) và OleDbCommand (cho OLE DB).
Một số thuộc tính và phương thức thông dụng của đối tượng Command :
Thuộc tính :
– CommandText : Thiết lập/ Lấy lệnh thao tác với dữ liệu.
– CommandTimeout : Thiết lập/ Lấy thời gian chờ thực hiện lệnh. Sau khi chờ 1 khoảng thời gian nếu vượt quá sẽ báo lỗi.
– CommandType : Thiết lập/ Lấy kiểu của đối tượng lệnh (lệnh trực tiếp, stored procedure…)
– Parameters : Các tham số truyền vào cho đối tượng command (ở kiểu OleDbParameterCollection/ SQLParameterCollection).
– Connection : Thiết lập / lấy kết nối đang được đối tượng Command sử dụng.
– Transaction : Thiết lập / lấy giao tác mà đối tượng Command thực thi.
Phương thức:
– ExecuteReader : Thực thi câu lệnh CommandText của đối tượng Command và trả về kiểu DataReader (OleDbDataReader / SqlDataReader ).
– ExecuteNonQuery : Thực thi câu lệnh CommandText của đối tượng Command, đây là dạng câu lệnh cập nhật cơ sở dữ liệu (xoá /sửa) nên chỉ trả về số dòng bị ảnh hưởng mà không trả về dòng dữ liệu nào.
– ExecuteScalar : Thực thi câu truy vấn của đối tượng Command và chỉ trả về cột đầu tiên của dòng đầu tiên của kết quả. Các kết quả còn lại bị bỏ qua.
– Các hàm khởi tạo của đối tượng SqlCommand (Tương tự cho đối tượng OleDbCommand):
-+New() : không có tham số nào.
+ New(cmdText as String) ,trong đó :
+cmdText là câu lệnh truyền vào cho đối tượng Command.
+ New(cmdText as String, connectin as SqlConnection) ,trong đó:
+ cmdText như trên.
+ connection là đối tượng kết nối truyền vào cho đối tượng Command.
+ New(cmdText as String, connection as SqlConnection, transaction as SqlTransaction), trong đó :
+ cmdText,connnection như trên.
+ Transaction : là giao tác truyền cho đối tượng Command.
Các ví dụ :
– Sử dụng câu lệnh ExecuteNonQuery để update dữ liệu :

  • Dim connStr As String = "server=CSC;database=Northwind;uid=sa;pwd=sa"
    Dim cmdStr As String = "Update Customers set CompanyName=’CSC’ where CustomerID=’Seves’"
    Dim conn As New SqlConnection(connStr)
    conn.Open()
    Dim cmd As SqlCommand = New SqlCommand(cmdStr, conn)
    cmd.ExecuteNonQuery()
    conn.Close()

– Sử dụng câu lệnh ExecuteReader để lấy dữ liệu:

  • Dim conn As New SqlConnection("server=CSC; database=Northwind;uid=sa; pwd=sa")
    Dim cmd As New SqlCommand("Select * From Customers", conn)
    conn.Open()
    Dim rdr As SqlDataReader = cmd.ExecuteReader()
    While rdr.Read()
    Response.Write(rdr.GetString(0) + "")
    End While
    rdr.Close()

– Sử dụng câu lệnh ExecuteScalar để lấy dữ liệu:

  • Dim conn As New SqlConnection("server=CSC; database=Northwind2;uid=sa; pwd=sa")
    conn.Open()
    Dim cmdStr As String = "Select * From Customers"
    Dim cmd As SqlCommand = New SqlCommand(cmdStr, conn)
    Response.Write(cmd.ExecuteScalar())
    conn.Close()

4) Về khái niệm Connection Pooling
Trong ứng dụng web ASP.NET, Connection Pooling là khái niệm nhiều người dùng cùng truy xuất vào cùng 1 database để lấy về cùng một loại dữ liệu.
ADO.NET cho phép quản lý Connection Pooling theo nhiều cách khác nhau. Nếu database đang sử dụng là dạng OLEDB thì connection pooling do chính Provider của Database đó quản lý, vì vậy chúng ta không cần phải quản lý. Trong trường hợp sử dụng database SQL Server thì Connection Pooling sẽ được quản lý một cách không tường minh nhưng cũng cho phép thiết lập những tuỳ chọn để chúng ta tự quản lý. Các thuộc tính để quản lý Pooling (thiết lập trong Connection String) là : Max Pool Size (số connection tối đa trong pool, Min Pool Size : số connection tối thiểu trong pool).
Khi 1 connection được “open” có 2 tình huống : nếu đã open rồi thì connection đó đã nằm trong pool và được “lấy ra”, nếu chưa có trong pool thì sẽ được thêm vào pool. Khi đóng connection thì tất là nó sẽ được trả về pool.

5) Xử lý các ngoại lệ ADO.NET
Để bắt lỗi trong 1 chương .NET thông thường thì ta dùng cú pháp try…catch thông thường . Đối với chương trình ADO.NET có lớp chịu trách nhiệm xử lý các ngoại lệ là SqlException (cho CSDL SQL Server) và OleDbException (cho CSDL OleDB).
Ví dụ về xử lý ngoại lệ trong SQL Server

  • Dim connString As String = "server=CSC;database=Northwind;uid=sa;pwd=sa"
    Dim conn As SqlConnection = New SqlConnection(connString)
    Try
    conn.Open()
    Catch ex As SqlException
    Response.Write(ex.ToString())
    End Try

Tiếp theo : Bài 3 : Đối tượng DataReader và DataAdapter

Advertisements

Bình luận

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s