我有一个要求,我需要在SQL Server表中转储我的Excel数据。 excel文件可能会有所不同(每次都有不同的列数),对于每个excel源文件,每次都必须在SQL Server中创建一个新表。
我尝试使用SSIS任务来处理输入/输出列之间的映射必须在包中预定义。此外,在执行“OLE DB目标”任务之前,必须存在我正在转储数据的目标表。
为了克服一些限制,我做了一些解决方法:
由于我的初始映射是在包中的50个输入/输出列之间,所以当下一个excel到达包含较少no的包时。列,包执行失败。 我正在通过c#代码运行包,当我在BIDS中独立运行此包时,它自己传递SSIS变量值,它失败并且列引用无效错误。 我必须通过代码运行这个包,并且每次都不能在失败时重新映射它。
我无法在此论坛上粘贴我的声誉的Package快照。它是一个包含2个任务的简单包,即“Excel Source”和'OLE DB Destination'。我面临的唯一问题是包中的动态映射。休息一切正常。
请帮我解决这个问题。在此先感谢!!
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;
}
}
}