Làm thế nào để làm việc với ADO.Net ở chế độ ngắt kết nối
- Ngoc Huynh
Tận dụng khả năng của ADO.Net có thể làm việc ở chế độ ngắt kết nối nhằm giúp cho ứng dụng của bạn duy trì việc ngắt kết nối với cơ sở dữ liệu, duy trì các nguồn hệ thống (system resources), và giảm lượng network traffic.
ADO.Net – framework truy cập dữ liệu của Microsoft đã được sử dụng trong hơn hai thập kỷ qua. Bạn có thể sử dụng ADO.Net để thực thi các hoạt động CRUD (Create, Read, Update, Delete) trên hàng loạt cơ sở dữ liệu từ môi trường được quản lý (managed environment) của .Net CLR.
Một nguồn cung cấp dữ liệu là một thành phần phần mềm có khả năng đóng gói (encapsulate) các giao thức được sử dụng để kết nối và tương tác với cơ sở dữ liệu cơ bản từ môi trường được quản lý Một số nguồn cung cấp dữ liệu phổ biến bao gồm: SQL Server Data Provider, Oracle Data Provider, và OLEDB Data Provider. ADO.Net có thể làm việc ở chế độ kết nối và ngắt kết nối.
Chế độ kết nối là một trong những chế độ kết nối với cơ sở dữ liệu cơ bản vẫn còn tồn tại xuyên suốt quá trình hoạt động. Trong khi đó, chế độ ngắt kết nối là chế độ mà ADO.Net gọi ra dữ liệu từ cơ sở dữ liệu cơ bản, lưu trữ dữ liệu được gọi ra một cách tạm thời trong bộ nhớ, và sau đó đóng kết nối với cơ sở dữ liệu.
Khi sử dụng ADO.Net ở chế độ ngắt kết nối, bạn sẽ sử dụng DataAdapter, DataSet, DataTable và DataTableReader. Trong khi DataAdapter đóng vai trò cầu nối giữa ứng dụng và cơ sở dữ liệu, thì DataSet là một đại diện tiêu biểu của chế độ ngắt kết nối của cơ sở dữ liệu trên bộ nhớ và có thể chứa một hay nhiều các DataTable instance. DataTableReader thì tương tự với DataReader ngoại trừ việc nó có thể làm việc ở chế độ ngắt kết nối.
Về phần code
Code snippet dưới đây sẽ chỉ cho bạn thấy cách bạn có thể gọi ra dữ liệu từ một cơ sở dữ liệu ở chế độ ngắt kết nối. Lưu ý rằng ví dụ này kết nối với cơ sở dữ liệu AdventureWorks chỉ với mục đích minh họa.
static void Main(string[] args)
{
string connectionString = ConfigurationManager.ConnectionStrings[“AdventureWorksDB”].ConnectionString;
try
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(“SELECT * FROM [AdventureWorks2014].[HumanResources].[Department]”, sqlConnection);
DataSet dataSet = new DataSet();
sqlDataAdapter.Fill(dataSet);
}
}
catch (Exception ex)
{
//Write code here to handle exception
}
}
Ở ví dụ trên, kết nối với cơ sở dữ liệu được thiết lập bằng việc sử dụng một instance của SqlConnection class. Sau đó một DataAdapter instance được tạo ra và nó được sử dụng để chứa một DataSet instance bằng cách sử dụng Fill() method của DataAdapter class. Kết nối với cơ sở dữ liệu sẽ được đóng một cách tự động. Dữ liệu được lưu trữ trong DataSet instance thường trú trong bộ nhớ và không phụ thuộc vào kết nối cơ sở dữ liệu hoạt động khi DataSet làm việc ở chế độ ngắt kết nối. Một khi dữ liệu được gọi ra từ cơ sở dữ liệu và được lưu trữ trong bộ nhớ đối với trường hợp một DataSet instance, thì bạn cũng có thể thay đổi dữ liệu nếu bạn muốn và sau đó tiếp tục với dữ liệu đó trở lại khi cần.
DataRow dataRow = dataSet.Tables[0].NewRow(); //Creates a new data row
//You can now specifythe values for each of the columns of the data row
dataSet.Tables[0].Rows.Add(dataRow); //Add the data row
sqlDataAdapter.Update(dataSet); // Inserts a new record
Lưu ý rằng bạn có thể sử dụng block “đang sử dụng” dựa theo kiểu dữ liệu thực thi Idisposable interface. Toàn bộ block “đang sử dụng” được bọc bên trong một try – catch block để xử lý các exception có thể tăng lên khi chương trình đang trong quá trình thực thi. Và chuỗi kết nối trong ví dụ này được gọi ra từ một tệp tin cấu hình. Bạn cũng có thể mã hóa chuỗi kết nối nếu cần.
Bạn cũng có thể làm tăng (populate) DataTable theo cách mà đã thực hiện với cách làm tăng DataSet. Sau đây là ví dụ minh họa:
string connectionString = ConfigurationManager.ConnectionStrings[“AdventureWorksDB”].ConnectionString;
try
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(“SELECT * FROM [AdventureWorks2014].[HumanResources].[Department]”, sqlConnection);
DataTable dataTable = new DataTable();
sqlDataAdapter.Fill(dataTable);
}
}
catch (Exception ex)
{
//Write code here to handle exception
}
Một DataTableReader kết hợp những gì tốt nhất của cả DataTable và DataReader. Ví dụ như: DataReader có khả năng làm việc ở chế độ ngắt kết nối và nó nhanh hơn cả DataTable và DataReader. Để tạo ra DataTableReader, tất cả những gì bạn cần làm là invoke CreateDataReader() method trên DataTable instance.
DataTableReader dataTableReader = dataTable.CreateDataReader();
Ví dụ về lập trình dưới đây sẽ chỉ cho bạn thấy cách hiển thị tên gọi của tất cả các department bằng việc sử dụng DataTableReader.
static void Main(string[] args)
{
string connectionString = ConfigurationManager.ConnectionStrings[“AdventureWorksDB”].ConnectionString;
try
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(“SELECT * FROM [AdventureWorks2014].[HumanResources].[Department]”, sqlConnection);
DataTable dataTable = new DataTable();
sqlDataAdapter.Fill(dataTable);
DataTableReader dataTableReader = dataTable.CreateDataReader();
while(dataTableReader.Read())
{
Console.WriteLine(dataTableReader[“Name”].ToString());
}
}
}
catch (Exception ex)
{
//Write code here to handle exception
}
Console.Read();
}
Nguồn bài viết : http://www.infoworld.com/