环境描述
我有一个从asp.net执行的SSIS任务,该包通过UNC路径从excel文件获取数据,并将数据放入sql server databaase。我已将SSIS部署到文件系统,它具有Windows身份验证数据库连接,并且IIS用户具有数据库访问权限。我可以作为我用来托管Web应用程序的AppPoolUser登录并打开/修改有问题的文件,以便那些基本权限存在。 Web App在x86中编译。
工作时:
从Visual Studio(ctrl + shift + W)运行时,它运行正常,每件事都成功完成。
如果不起作用:
从客户端浏览器运行时。它上传文件但在包中失败。
我的问题
客户端和服务器的不同之处是什么?如何使其工作?我的印象是,当运行Web应用程序时,所有连接都通过AppPool用户,因此它应该在包含的任何计算机服务器上表现相同?我需要这样做而不需要CMD。
c#运行SSIS包的代码
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;
public partial class Pages_Quality : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Upload_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string fileExt =
System.IO.Path.GetExtension(FileUpload1.FileName);
if (FileUpload1.FileName == "Breached.xlsx")
{
try
{
FileUpload1.SaveAs("*:\\***\\***\\" +
FileUpload1.FileName);
Label1.Text = "Upload Done";
Application app = new Application();
Package package = app.LoadPackage(@"*:\**\**\Quality.dtsx", null);
DTSExecResult result = package.Execute();
Label2.Text = (result.ToString());
}
catch (Exception ex)
{
Label1.Text = "ERROR: " + ex.Message.ToString();
}
}
else
{
Label1.Text = "Only Breached.xls is allowed!";
}
}
else
{
Label1.Text = "You have not specified a file.";
}
}
}
答案 0 :(得分:0)
您在部署和运行应用程序的机器(您的情况下是Web服务器)中是否安装了SSIS服务或SSIS组件(客户端工具)?
您可以在使用Visual Studio开发和调试应用程序应用程序的同一个开发PC中进行出价。通常,SSIS组件与BID一起安装,因此您不需要SSIS服务来运行程序包。这可能是您的开发PC中的包执行正常的情况。但是,它永远不会在您的Web服务器中工作,因为您的Web服务器中没有安装这些组件。
希望这会对你有所帮助。
此致 Sandip
答案 1 :(得分:0)
如果您使用Excel源连接,很可能是因为excel驱动程序仅在32位模式下工作而发生错误,而当您尝试从Web调用它时,它会在64位下执行。
检查一下。
此致