在下面的代码中,我正在尝试将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);
但代码不起作用。有什么想法吗?
答案 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)
您是否尝试为数据库中的列设置默认值?我认为这是最简单的方法,因为在插入任何记录之后,默认值也会插入到指定的列中(它就像触发器一样)。