Excel源和目标SQL Server表中的SSISdynamic列映射

我有一个要求,我需要在SQL Server表中转储我的Excel数据。 excel文件可能会有所不同(每次不同的列号),并且对于每个excel源文件,每次在SQL Server中都必须创build一个新表。

我尝试过使用SSIS任务来处理input/输出列之间的映射,必须在包中进行预定义。 另外,在执行“OLE DB目的地”任务之前,我正在转储数据的目标表必须存在。

为了克服一些限制,我没有做什么解决方法:

  1. 在我的数据库中创build了一个带有50列的示例表(因为这是我在源代码excel中的任何时间点上可以使用的最大列数)。
  2. 执行包之前,我拿一个样本表的副本给它一个名字,因为我需要为每个源有不同的表。
  3. dynamic传递Excel源文件通过C#代码和SSISvariables打包。

由于我的初始映射是在包中的50个input/输出列之间,当下一个excel到达包的时候没有更less。 的列,包执行失败。 我正在通过C#代码运行包,也是当我独立运行这个包在BIDS传递SSISvariables值本身,它失败与无效列引用错误。 我必须通过代码来运行这个包,我不能每次都在失败时重新映射它。

我不能在这个论坛上粘贴Package的快照。 它是一个简单的包,有2个任务,即“Excel来源”和“OLE DB目的地”。 我面临的唯一问题是dynamic映射包。 rest一切工作正常。

这个你能帮我吗。 提前致谢!!

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Microsoft.SqlServer.Dts.Runtime; namespace SSRSReports { public partial class About : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { btnpkg.Visible = true; } protected void btnpkg_Click(object sender, EventArgs e) { string newtableName = "DATA_MD0000001_I606423"; string sourceExcel = FileUpload1.PostedFile.FileName; DataQuery(newtableName); RunPackage(sourceExcel, newtableName); } public void DataQuery(string newtableName) { DataClasses1DataContext dc = new DataClasses1DataContext(); dc.ExecuteCommand("select * into" + " " + newtableName + " " + "from DummyTable"); } public void RunPackage(string SourceExcelPath, string DestinationTableName) { string pkgLocation; Package pkg; Application app; DTSExecResult pkgResults; Variables vars; lblResults.Visible = false; pkgLocation = @"C:\Visual Studio 2008\Projects\DemoProject\DemoProject\Package.dtsx"; app = new Application(); pkg = app.LoadPackage(pkgLocation, null); vars = pkg.Variables; vars["SourceExcelFile"].Value = SourceExcelPath; vars["DestinationTableName"].Value = DestinationTableName; pkgResults = pkg.Execute(null, vars, null, null, null); if (pkgResults == DTSExecResult.Success) lblResults.Text = "Package ran successfully"; else lblResults.Text = "Package failed"; lblResults.Visible = true; } } }