动态地将数据写入SQL Server表中的列

时间:2016-04-12 23:06:10

标签: c# sql-server

我有一个.csv个文件,大约有200列,列的顺序一直在变化。我想从文件中读取每一行,在数据库中标识相应的列名,并相应地将数据写入表中。

为此,我可以使用一个简单的开关案例来检查列的名称。由于有200列,我想知道是否有其他方法可以做到这一点。

示例:

    public void ColName(string str, Type a)
     {
       SampleTableName obj = new SampleTableName();
       obj."str" = a;
       connection.AddSampleTableName(obj);
       connection.savechanges();
     }

    /* SampleTableName has columns: [Name, Age] */
    ColName("Name","XYZ");
    Output:
    Name Age
    XYZ  NULL

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:0)

如果列名相同,则可以使用SqlBulkCopy并添加列映射列表。只要设置了DataTable名称,顺序就无关紧要了。

DataTable table = CreateTable(rows);
using (var bulkCopy = new SqlBulkCopy(connectionString))
{
    foreach (var col in table.Columns.OfType<DataColumn>())
    {
        bulkCopy.ColumnMappings.Add(
            new SqlBulkCopyColumnMapping(col.ColumnName, col.ColumnName));
    }
    bulkCopy.BulkCopyTimeout = 600; // in seconds
    bulkCopy.DestinationTableName = "<tableName>";
    bulkCopy.WriteToServer(table);
}

如果列名不相同,可以使用查找不同名称的字典。

答案 1 :(得分:0)

为了便于维护,我选择了一个开关盒叹息。但是,我编写了一个小脚本,将所有这些字段值添加到表对象中。