我有一个.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
有什么想法吗?感谢。
答案 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)
为了便于维护,我选择了一个开关盒叹息。但是,我编写了一个小脚本,将所有这些字段值添加到表对象中。