You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS脚本任务报错:无法执行脚本,脚本入口点无效

解决SSIS脚本任务"Cannot execute script because the script entry point is invalid"错误

这个错误的核心问题是你直接把WinSCP的控制台程序示例搬到SSIS脚本任务里了,但两者的入口规则完全不一样!SSIS脚本任务有自己的执行入口要求,咱们一步步来修正:

错误根源

  1. SSIS脚本任务的执行入口必须是ScriptMain类中的Execute方法,而非控制台程序的Main方法
  2. 你错误地把业务逻辑嵌套在了自定义的upload类里,SSIS根本找不到正确的执行入口
  3. SSIS环境里不能用Console.WriteLine输出日志,得用SSIS自带的事件日志方法

修正后的完整代码

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using WinSCP;

namespace ST_1ae95a63b20641ffb8ed1769503e2841
{
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
        public override void Execute()
        {
            bool fireAgain = true;
            try
            {
                SessionOptions sessionOptions = new SessionOptions
                {
                    Protocol = Protocol.Sftp,
                    HostName = "a.com",
                    UserName = "btest",
                    Password = "c",
                    SshHostKeyFingerprint = "ssh-rsa 2048 avc",
                };

                using (Session session = new Session())
                {
                    // 连接SFTP服务器
                    session.Open(sessionOptions);

                    // 配置传输选项
                    TransferOptions transferOptions = new TransferOptions();
                    transferOptions.TransferMode = TransferMode.Binary;

                    // 执行文件上传
                    TransferOperationResult transferResult;
                    transferResult = session.PutFiles(@"d:\abc\efdg\*", "/cvf/pqr/", false, transferOptions);

                    // 检测上传过程中的错误
                    transferResult.Check();

                    // 输出上传成功日志到SSIS执行日志
                    foreach (TransferEventArgs transfer in transferResult.Transfers)
                    {
                        Dts.Events.FireInformation(0, "SFTP Upload", $"Upload of {transfer.FileName} succeeded", string.Empty, 0, ref fireAgain);
                    }

                    // 标记任务执行成功
                    Dts.TaskResult = (int)DTSExecResult.Success;
                }
            }
            catch (Exception e)
            {
                // 输出错误日志到SSIS执行日志
                Dts.Events.FireError(0, "SFTP Upload Error", $"Error: {e.Message}", string.Empty, 0);
                // 标记任务执行失败
                Dts.TaskResult = (int)DTSExecResult.Failure;
            }
        }
    }
}

关键修改点说明

  • 移除多余嵌套类:把所有逻辑直接放在ScriptMain类中,这是SSIS脚本任务唯一认可的入口类
  • 替换执行入口方法:将控制台风格的Main方法替换为SSIS要求的Execute重写方法,这是脚本任务的执行起点
  • 更换日志输出方式:用Dts.Events.FireInformation和Dts.Events.FireError替代Console.WriteLine,日志会直接显示在SSIS的执行日志面板中
  • 添加任务状态标记:通过Dts.TaskResult明确告诉SSIS任务执行成功或失败,确保流程能正确判断下一步走向
  • 补充日志必需参数:添加fireAgain变量,这是SSIS日志方法的必填参数,用于控制是否继续触发后续日志事件

最后别忘了确认你已经在SSIS脚本任务的引用中添加了WinSCP的DLL文件,否则会出现找不到WinSCP命名空间的错误!

内容的提问来源于stack exchange,提问作者mehtat_90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:02:29