从C#应用程序

时间:2017-05-02 12:02:43

标签: c# ssis

我们有一个SSIS包,在我们的服务器上从BI运行时可以很好地执行。

我们有一个客户端应用程序调用服务器上的服务,并且被调用的服务执行SSIS包。

此包在BI中执行良好且没有错误。该软件包生成一些PDF文件,然后使用PDFSharp组合这些PDF文件,以便我们以后可以通过电子邮件发送单个PDF文件。该包还将一些记录插入到数据库表中,以便我们可以跟踪生成的这些文件。

但是,一旦客户端应用程序调用该服务来执行SSIS包,我们就会收到以下错误消息:

enter image description here

有谁知道我们收到这些错误消息的原因?

服务用于执行此SSIS包的代码是以下C#代码:

                //Get the package's information from the database.
                List<SSISPackage> lsSSISPackages = MatchDataTableToTypeProperties<SSISPackage>(dt);

                SSISPackage package = lsSSISPackages.FirstOrDefault();
                string packageLocation = $"{package.Path}/{package.Name}";

                Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
                DtsEventListeners eventListener = new DtsEventListeners();
                Package pkg = app.LoadPackage(packageLocation, eventListener);

                //Get and set parameters.
                string[] arrParameters = package.Parameters.Split(',');
                foreach (string parameter in arrParameters)
                {
                    var param = pkg.Parameters.Add(parameter, TypeCode.Int32);
                    param.Value = 1;
                }

                try
                {
                    DTSExecResult pkgResults = pkg.Execute(null, null, eventListener, null, null);

                    string errors = eventListener.Errors;

                    MessageBox.Show($"Execution result: {errors}");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);

                }

现在,用于从SSIS包中捕获错误的DtsEventListeners类如下所示:

public class DtsEventListeners : DefaultEvents
{
    public string Errors { get; set; }

    public override bool OnError(DtsObject source, int errorCode, string subComponent,
    string description, string helpFile, int helpContext, string idofInterfaceWithError)
    {
        // Add application-specific diagnostics here.
        string err = $"Error in {source}/{subComponent} : {description}";
        Errors += $"{err}{Environment.NewLine}{Environment.NewLine}";
        return false;
    }
}

但是,对于我的生活,我不能理解为什么这会从C#服务端失败。我不知道为什么会失败,也不知道如何解决它。

如果有人有任何想法,我们将非常感谢您的帮助!

0 个答案:

没有答案