SSIS脚本任务报错:无法执行脚本,脚本入口点无效
解决SSIS脚本任务"Cannot execute script because the script entry point is invalid"错误
这个错误的核心问题是你直接把WinSCP的控制台程序示例搬到SSIS脚本任务里了,但两者的入口规则完全不一样!SSIS脚本任务有自己的执行入口要求,咱们一步步来修正:
错误根源
- SSIS脚本任务的执行入口必须是
ScriptMain类中的Execute方法,而非控制台程序的Main方法 - 你错误地把业务逻辑嵌套在了自定义的
upload类里,SSIS根本找不到正确的执行入口 - 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
相关产品推荐
相关产品推荐

