2011-07-06 38 views
5

Trong đoạn mã dưới đây, tôi đang cố gắng chèn bản ghi từ excel vào bảng cơ sở dữ liệu, nhưng cột bổ sung không được chuyển qua excel. với giá trị không đổi (vòng lặp foreach có giá trị khác) được gán từ trang được yêu cầu.Làm thế nào để chèn một giá trị không đổi vào một cột bằng cách sử dụng ASP.Net SqlBulkCopy

string CONSTANTVALUE="Test"; 
bulkCopy.DestinationTableName = "TABLE NAME"; 
bulkCopy.ColumnMappings.Add("TABLECOLUMN1", "EXCELCOLUMN1"); 
bulkCopy.ColumnMappings.Add("TABLECOLUMN2", "EXCELCOLUMN2"); 
bulkCopy.ColumnMappings.Add("TABLECOLUMN3", CONSTANTVALUE); 
bulkCopy.WriteToServer(dr); 

Nhưng mã không hoạt động. Ý tưởng nào?

Trả lời

4

Tôi giả định dr là người đọc thuộc loại nào đó. Làm thế nào là nó dân cư? Có thể chọn giá trị mặc định vào cột và bản đồ rằng. Một cái gì đó như thế này (cú pháp sql)

select 
    EXCELCOLUMN1, 
    EXCELCOLUMN2, 
    'ConstantValueFromPage' as EXCELCUSTOM 
from 
    sheet1 

Sau đó có:

bulkCopy.ColumnMappings.Add("TABLECOLUMN3", "EXCELCUSTOM"); 

HTH

+0

Hãy tưởng tượng giá trị mặc định là một chuỗi rất dài. Liệu giá trị mặc định cho mỗi hàng reoccurring mặc định có được tối ưu hóa trong cấu trúc dữ liệu truyền tải (trình điều khiển Oracle hoặc SqlServer) và trong ADO.NET DataTable không? –

0

Bạn đã thử đặt giá trị mặc định cho cột trong cơ sở dữ liệu chưa? Tôi nghĩ đó là cách dễ dàng nhất, sau khi chèn bất kỳ bản ghi nào, giá trị mặc định cũng sẽ được chèn vào cột được chỉ định (nó hoạt động như trình kích hoạt).

+1

Theo câu hỏi, tôi nghĩ giá trị không đổi có thể khác nhau theo từng yêu cầu. làm thế nào bạn có thể thiết lập giá trị mặc định? – suryakiran

+0

Trong trường hợp đó, tôi nghĩ bạn có thể sử dụng SMO (đối tượng quản lý máy chủ, API để làm việc với SQL Server trong mã) để thay đổi giá trị mặc định của cột, trước khi chèn bản ghi mới. –

4

Bạn có thể làm điều đó, bằng cách thay đổi văn bản lệnh của bạn. Như bên dưới

string CONSTANTVALUE="Test"; 
OleDbCommand command=new OleDbCommand("select *,"+CONSTANTVALUE+" as [ConstantCol] from [sheet$]",ObleDbCon); 
using (DbDataReader dr = command.ExecuteReader()) 
{ 
bulkCopy.DestinationTableName = "TABLE NAME"; 
bulkCopy.ColumnMappings.Add("TABLECOLUMN1", "EXCELCOLUMN1"); 
bulkCopy.ColumnMappings.Add("TABLECOLUMN2", "EXCELCOLUMN2"); 
bulkCopy.ColumnMappings.Add("TABLECOLUMN3", "ConstantCol"); 
bulkCopy.WriteToServer(dr); 
} 
+0

Mã này làm việc tuyệt vời cho tôi, nhưng hai ghi chú: 1) Các tham số cho ColumnMappings.Add là (sourceColumn, destinationColumn). Vì vậy, nếu bạn đang cố gắng sao chép từ Excel vào một bảng cơ sở dữ liệu, thì các đối số nên được đảo ngược, nó phải là bulkCopy.ColumnMappings.Add ("EXCELCOLUMN1", "TABLECOLUMN1"); 2) nếu bạn định sử dụng tên cột cho Excel, thì chuỗi kết nối Excel của bạn cần bao gồm HDR = Có. Nếu thấy dễ sử dụng các chỉ mục để tôi không phải dựa vào người làm cho bảng tính sử dụng tên tiêu đề phù hợp. CẢM ƠN! –

Các vấn đề liên quan