如何使用ASP.Net SqlBulkCopy将常量值插入到列中

时间:2011-07-06 11:10:28

标签: asp.net bulkinsert sqlbulkcopy

在下面的代码中,我正在尝试将excel中的记录插入到Database表中,但是不会通过excel传递额外的列,而excel必须使用从中分配的常量值(具有不同值的foreach循环)填充请求的页面。

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);

但代码不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:5)

您可以通过更改命令文本来执行此操作。如下

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);
}

答案 1 :(得分:4)

我认为您的dr是某种形式的读者。它是如何填充的?可以在列中选择默认值并映射 。像这样的东西(sql语法)

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

然后:

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

HTH

答案 2 :(得分:0)

您是否尝试为数据库中的列设置默认值?我认为这是最简单的方法,因为在插入任何记录之后,默认值也会插入到指定的列中(它就像触发器一样)。