2013-07-04 27 views

Trả lời

25

Bạn có lẽ cần một số điều như

public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize) 
{ 
    // Get the DataTable 
    DataTable dtInsertRows = dataTable; 

    using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity)) 
    { 
     sbc.DestinationTableName = DestinationTbl; 

     // Number of records to be processed in one go 
     sbc.BatchSize = batchSize; 

     // Add your column mappings here 
     sbc.ColumnMappings.Add("field1","field3"); 
     sbc.ColumnMappings.Add("foo","bar"); 

     // Finally write to server 
     sbc.WriteToServer(dtInsertRows); 
    }  
} 

Tham khảo: How to use SqlBulkCopyColumnMappingCollection? . .

Seel cũng http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy

+2

Và tham chiếu là: http://stackoverflow.com/a/2978440/284240;) –

+0

@Tim Schmelter: Có – StackTrace

0

sử dụng các ColumnMappings:

s.ColumnMappings.Add("Name", "Name"); 
s.ColumnMappings.Add("Address", "Address"); 
0

Phương pháp này Thêm vào bộ sưu tập ColumnMappings cho phép bạn để ánh xạ các cột từ bảng nguồn tới bảng đích. Phương thức ColumnMappings.Add chấp nhận bốn cách khác nhau để ánh xạ các cột của bạn.

SqlBulkCopy là rất nhiều nghiêm ngặt về kiểu dữ liệu của cả hai cột mà bạn phải cân nhắc khi thêm nó vào ColumnMappings bộ sưu tập

5

Nó có thể là hữu ích để biết rằng nếu các cột trong truy vấn nguồn (hoặc bảng) và bảng mục tiêu có cùng tên và đang trong thứ tự chính xác, sau đó là không cần phải viết ra các ánh xạ một cách rõ ràng, vì SqlBulkCopy sẽ tạo ra một bản đồ mặc định với thứ tự mặc định này.

0

này đã trở thành một nhiệm vụ chung như vậy mà tôi đã viết helper này cho nó:

public static void AutoMapColumns(SqlBulkCopy sbc, DataTable dt) 
{ 
    foreach (DataColumn column in dt.Columns) 
    { 
     sbc.ColumnMappings.Add(
      new SqlBulkCopyColumnMapping(column.ColumnName, column.ColumnName)); 
    } 
} 

Kể từ khi tôi đã tạo ra những DataTable bản thân mình, tôi đặt tên các cột của nó giống như bảng SQL.