Tác giả: Sưu tầm
Mô tả:
SqlBulkCopy là 1 tính năng mới ADO.NET 2.0 mà cho phép coder dễ dàng sao chép giữa các tables trong 1 CSDL hoặc giữa các tables trong các CSDL qua lại lẫn nhau.
Trong bài viết này, mình sẽ hướng dẫn các bạn mới vào nghề tận dụng cái tính năng được bầu chọn là "Top 10 tính năng hay nhất của ADO.NET 2.0" này (theo:c-sharpcorner.com)
Để thực hành bài này, trước tiên bạn hãy tạo 1 table có tên là DestinationBulkTable, có 3 field: EmployeeID,FirstName,LastName. Mục đích: tí nữa chúng ta sẽ dùng SqlBulkCopy để copy dữ liệu từ 3 trường: EmployeeID,FirstName,LastName trong bảng Employees của CSDL Northwind. Bước chuẩn bị này, các bạn tự làm nhé, mình mạn phép bỏ qua ^_^
Để đơn giản, mình tạo 1 ứng dụng Console Application cho gọn nhẹ, dễ thực hành. Đầu tiên, các bạn "du nhập" các namespace sau:
using System.Data;
using System.Data.SqlClient;
Trong hàm main, chúng ta gõ đoạn code sau, đây là những dòng code khá đơn giản và mình cũng đã comment cho nó, nên các bạn sẽ hiểu được vấn đề ^_^
Mã: Chọn tất cả
//khai báo 1 chuỗi kết nối string chuoiketnoi = @"server = .\sqlexpress;integrated security = true;database = northwind;"; //tạo 1 bộ kết nối với dữ liệu nguồn SqlConnection sourceConn = new SqlConnection(chuoiketnoi); //bắt đầu kết nối với dữ liệu nguồn sourceConn.Open(); //chọn ra các field: EmployeeID,FirstName,LastName từ bảng Employees SqlCommand commandSourceData = new SqlCommand("SELECT EmployeeId,FirstName,LastName FROM Employees", sourceConn); //ghi những dòng dữ liệu kết quả vào bộ đọc SqlDataReader reader = commandSourceData.ExecuteReader(); //tạo 1 bộ kết nối tới dữ liệu đích SqlConnection destinationConn = new SqlConnection(chuoiketnoi); destinationConn.Open(); //tạo 1 BulkCopy //đối mục:nhận 1 chuỗi kết nối //lưu ý: có thể là 1 CSDL khác Northwind //để copy dữ liệu ra ngoài CSDL Northwind SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConn); //thuộc tính DestinationTableName nhận tên bảng dữ liệu đích //mà dữ liệu được sao chép đến bulkCopy.DestinationTableName = "DestinationBulkTable"; try { //dùng phương thức WriteToServer //để bắt đầu sao chép dữ liệu chứa trong reader //vào DestinationBulkTable //đối mục của nó: 1 reader hoặc 1 đối tượng DataTable, hoặc 1 mảng các DataRow bulkCopy.WriteToServer(reader); } catch { Console.WriteLine("Khong the sao chep du lieu giua 2 bang"); } //đóng lại kết nối với dữ liệu nguồn sourceConn.Close(); //đóng lại kết nối với dữ liệu đích destinationConn.Close();