【问题标题】:Set constant value to some columns in SqlBulkCopy为 SqlBulkCopy 中的某些列设置常量值
【发布时间】:2016-03-23 09:43:46
【问题描述】:

我正在尝试将数据从 "csv" 文件传输到 SQL 数据库。是否可以默认映射一些不存在于 "csv" 文件中的字段? 如下所示: bulkCopy.ColumnMappings.Add("Destenition_column_name", "constant_value");

感谢您的提前!

【问题讨论】:

  • 您使用的是哪个数据源?如果您使用的是 DataTable,您可以简单地添加一列并为每条记录添加值。默认情况下,无法添加常量值。

标签: c# csv mapping sqlbulkcopy


【解决方案1】:

在填充数据表之前设置一个默认列怎么样?

var returnTable = new DataTable();
returnTable.Columns.Add("Constant_Column_Name").DefaultValue = "Constant_Value";

如果您随后添加行,则每行将始终具有该列的指定默认值,而无需显式设置。

【讨论】:

  • 为我工作。起初我很挣扎,因为我没有注意到它必须在你提到的之前添加。只想突出显示它。
【解决方案2】:

如果您自己创建 DataTable,Anytoe 的回答会很有用。但是,当您从某个库方法获取数据表时,可能会出现这样的情况,因此您使用默认值进行欺骗将不起作用。对于这种情况,我找到了这个解决方案:

var dt = await  GetDataTable();
dt.Columns.Add("ImportFileId", typeof(long), importFileId.ToString());

这是一个名为“表达式列”的功能。例如,您可以将此解决方案与具有“.dataset()”方法的 ExcelDataReader 库一起使用。

如果您不想使用“表达式列”,您总是可以遍历行:

 foreach (DataRow dr in dt.Rows)
 {
   dr["ImportFileId"] = importFileId.ToString();
 }

信息:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/dataset-datatable-dataview/creating-expression-columns

【讨论】:

    猜你喜欢
    • 2019-08-07
    • 2011-09-29
    • 2020-12-24
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多