Sao chép dữ liệu cực nhanh với SqlBulkCopy

Các thủ thuật về hệ thống, thư mục, tập tin và mạng

Các điều hành viên: tungcan5diop, QUANITGROBEST

Đăng trả lời
neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: Thứ 7 26/05/2007 4:31 pm
Been thanked: 8 times

Sao chép dữ liệu cực nhanh với SqlBulkCopy

Gửi bài by neverland87 »

Thủ thuật: Sao chép dữ liệu cực nhanh với SqlBulkCopy
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(); 
Cũng cần lưu ý là: số cột trong bảng dữ liệu đích phải bằng số cột trong bảng dữ liệu nguồn, như các bạn thấy mình dùng query để chọn ra 3 cột trong bảng Employees, và trong bảng DestinationBulkCopy cũng chỉ có 3 cột tương ứng
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: Sao chép dữ liệu cực nhanh với SqlBulkCopy

Gửi bài by anhtuyenbk »

Hay quá, cố gắng lên. :D Bình thường mình chỉ biết dùng Insert vào thôi >:) >:)
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
Hình đại diện của thành viên
Kỳ Nam
Guru
Guru
Bài viết: 510
Ngày tham gia: Chủ nhật 12/08/2007 8:47 pm
Đến từ: Qui Nhơn
Been thanked: 1 time
Tiếp xúc:

Re: Sao chép dữ liệu cực nhanh với SqlBulkCopy

Gửi bài by Kỳ Nam »

anhtuyenbk đã viết:Hay quá, cố gắng lên. :D Bình thường mình chỉ biết dùng Insert vào thôi >:) >:)
chắc tui nhiều chuyện , anhtuyenbk nghĩ lại coi "Hay quá, cố gắng lên." nằm đây có ổn 0
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: Sao chép dữ liệu cực nhanh với SqlBulkCopy

Gửi bài by anhtuyenbk »

Đó là một lời động viên tác giả , đâu có gì ko ổn đâu :D .
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
Đăng trả lời

Quay về