Excel表格到C#中的SQL表格 – 将Excel中的多列映射到SQL中的单列

我试图将Excel中的单个ListObject表上传到数据库中的SQL表。

我已经写了简单地生成一个SQL查询string的代码,并执行 – 这工作,但它不容易维护。

所以我发现这个技术: https : //stackoverflow.com/a/11268550/1610402

这使我可以填充数据表和批量插入到SQL中; 如果需要的话,可以使用列映射function。

然而,我在Excel中的表格结构不仅仅是列名称,以避免冗余数据。

因此我需要映射Excel中的列(例如):

Column1 Column2 '2015' '2016' '2017' '2018' '2019' '2020' 1 1 0.1 0.2 0.3 0.35 0.375 0.4 1 2 0.1 0.2 0.3 0.35 0.375 0.4 

到SQL中的列,如下所示:

 Column1 Column2 Year Value 1 1 2015 0.1 1 1 2016 0.2 1 1 2017 0.3 1 1 2018 0.35 1 1 2019 0.375 1 1 2020 0.4 1 2 2015 0.1 1 2 2016 0.2 1 2 2017 0.3 1 2 2018 0.35 1 2 2019 0.375 1 2 2020 0.4 

有没有更好的方式来做这个在C#.Net或者我应该坚持我的嵌套for循环和string生成器?

你想要的概念被称为“不透明”。 不pipe你用C#做这个还是不重要,因为你可以简单地在SQL-Server中加载第一个数据,

 SELECT IDENTITY(int,1,1) as RowId, Column1, Column2, [Year], [Value] INTO newTable FROM ( SELECT Column1,Column2,[2015],[2016],[2017],[2018],[2019],[2020] FROM oldTable ) as source UNPIVOT ( [Value] for [Year] in [2015],[2016],[2017],[2018],[2019],[2020] ) as target 

方括号用于使这些string显示为列名而不是数字或保留字。