Custom SSIS component created for SQL Server 2014 not working in SQL Server 2016 - ssis

We got a couple of custom SSIS components which were created targeting SSIS for SQL Server 2014.
We are now migrating our dtsx packages to SSIS for SQL Server 2016.
I have modified the custom SSIS components such that assembly references to DTS assemblies have been given the property SpecificVersion=False.
I'm using the DTS.Runtime.Application.Upgrade method to upgrade my packages in a console app. However the packages which have these custom components are throwing the below error.
What else should I be doing?
Error in DFT (SSIS.Pipeline) The "" failed to cache the component metadata object and returned error code 0x80131600.
Error in DFT (SSIS.Pipeline) Component , clsid {4F885D04-B578-47B7-94A0-DE9C7DA25EE2} failed to initialize due to error 0xC0047067 "The "%1" failed to cache the component metadata object and returned error code 0x%2!8.8X!.".
Error in DFT ( [2]) The component is missing, not registered, not upgradeable, or missing required interfaces. The contact information for this component is "".
Error in DFT (SSIS.Pipeline) The component metadata for "" could not be upgraded to the newer version of the component. The PerformUpgrade method failed.
Error in Package.dtsx The loading of the package has failed.

You get to rebuild the component against the 2016 SSIS binaries, redeploy it to the GAC and probably change the references in your packages to use the new components (unless the 2014->2016 migration process is entirely different than 2005->2008 and 2008->2012 which is when I stopped building custom components).
The reason for this is that the DLLs for SSIS are strongly signed/versioned and that signature changes between editions of the project so the 2014 component you built is against the 130 version of TxPipeline dll and it now needs to reference 140 to be successful.

Related

SSIS editing a script task and saving it doesn't work

Note: I am not an SSIS developer and have a very limited knowledge on it, so may be missing on very small details, please read carefully.
I have an existing SSIS package which has script task in one of the steps.
I had to update one single value in script task, so I opened it in notepad++ and updated the value and saved it. Now when the scheduled SSIS job runs, it still picks up the old value and not the updated one.
I realized script task is a VB file, so probably would need to re-compile it for the binaries. I read about it and found out, if you open it through VS and save it, VS automatically compiles it and you don't have to do anything further. I can be wrong here.
I can't do project deployment on the server, so I would just need the updated package file to replace it on the server.(I am taking this updated package file from the Visual studio project that I created to edit the SSIS package. I am not sure, if there is another way to get the package or even if this is a right package.
Now the problem is,
when I updated the old package using notepad++, it didn't throw any error when it was running through scheduled job, but it took the old value
Now when I am putting the new package that I edited using Visual studio, it throws below error
Executed as user: sampleUser(nameupdated). Microsoft (R) SQL Server Execute Package Utility Version 13.0.5026.0 for 32-bit Copyright (C) 2016 Microsoft. All rights reserved. Started: 5:08:09 PM Error: 2021-11-02 17:08:10.83 Code: 0xC0016016 Source: OraclePackage Description: Failed to decrypt protected XML node "DTS:Password" with error 0x8009000B "Key not valid for use in specified state.". You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available. End Error Error: 2021-11-02 17:08:11.26 Code: 0x00000005 Source: Rename files in archive folder to _yyyymmddhhmm Rename files in archive folder to _yyyymmddhhmm Description: Failed to migrate scripts contained in the package to the VSTA 14.0 format. Move the scripts to a new Script task. End Error Error: 2021-11-02 17:08:14.19 Code: 0x00000005 Source: Script Task Script Task Description: Failed to migrate scripts contained in the package to the VSTA 14.0 format. Move the scripts to a new Script task. End Error Error: 2021-11-02 17:08:17.17 Code: 0x00000001 Source: Script Task Description: Exception has been thrown by the target of an invocation. End Error DTExec: The package execution returned DTSER_FAILURE (1). Started: 5:08:09 PM Finished: 5:08:17 PM Elapsed: 7.25 seconds. The package execution failed. The step failed.
I read about this error and found that package's security level can cause this issue, so update the protection level of the package from "EncryptSensitiveWithUserKey" to "DontSaveSensitive"
Now when I am running the project I get below error
Executed as user: sampleuser(nameUpdated). Microsoft (R) SQL Server Execute Package Utility Version 13.0.5026.0 for 32-bit Copyright (C) 2016 Microsoft. All rights reserved. Started: 5:31:44 PM Error: 2021-11-02 17:31:53.93 Code: 0x00000001 Source: Script Task Description: Exception has been thrown by the target of an invocation. End Error DTExec: The package execution returned DTSER_FAILURE (1). Started: 5:31:44 PM Finished: 5:31:53 PM Elapsed: 9.047 seconds. The package execution failed. The step failed.
Please let me know if there is another way to edit the script task directly and compile it in place so that it takes the updated values else, if there is something else I can do.
Thanks in advance.
I found a solution(more of an error or less knowledge from my side actually)
Updating the security from "EncryptSensitiveWithUserKey" to "DontSaveSensitive"
When you open an existing SSIS package in Visual studio, the read and write variables are wiped out from script task for some reason. Reassigning them resolved the problem.
How did I find out if that was the problem, I put some exception handling in the script task to notify me of further issues.
Hope this helps to someone in the similar problem.

Execute package task in errorhandling gives error

In my OnError eventhandler I try to execute a (child) package but I get this error:
Error: Error 0x80040154. Failed to create an instance of empty child package. The Distributed Component Object Model (DCOM) configuration or the installation of SQL Server Integration Services, may be corrupted on your machine.
followed by Class not registered
This happens even if it is an empty package I call.
Is it not possible to execute an package in an EventHandler?
What else could lead to this error?
Packages are set as ExecuteOutOfProcess
Using Visual Studio 2019 with microsoft integration services installed.
Edit:
Setting ExecuteOutOfProcess to FALSE made the empty package run.
Another package with 3rdparty-components however failed.
But that is cleaclry caused by that 3party component. Investigating
Reinstalling the Integration Sevrices Add-on solved the problem

Cannot Add Script Component to Data Flow Task

Cannot add a Script Component to Data Flow Task for an SSIS Package that I am working on.
I am running Visual Studio 2017 and creating an SSIS Package that is targeted for SQL Server 2012
I am trying to drag the Script Component Task from the SSIS Toolbox to the Data Flow Task, I get the error as shown below
TITLE: Microsoft Visual Studio
The component could not be added to the Data Flow task. Could not
initialize the component. There is a potential problem in the
ProvideComponentProperties method.
ADDITIONAL INFORMATION:
Error at Replace Delimiter in File [SSIS.Pipeline]: Failed to create
COM Component Categories Manager due to error 0x80070002 "The system
cannot find the file specified.".
Error at Replace Delimiter in File [ [52]]: The component is missing,
not registered, not upgradeable, or missing required interfaces. The
contact information for this component is "".
Exception from HRESULT: 0xC0048021
(Microsoft.SqlServer.DTSPipelineWrap)
BUTTONS:
OK
The Script Component should be added to the Data Flow Task
Thanks for your suggestions - but I ended up upgrading my license to visual studio 2019 and it worked like a charm
I guess because with this version the SSDT is integrated better
Not really entirely sure what the issue was with Visual Studio 2017 - it could be my install but because VS 2019 didn't work I did not bother with it.

SSIS deploy package with variables using project parameters using package deployment model

There is an existing project(say Project1) which I am working on having
project param like
Name - Param_Local_Dir
Value - F:\Test\Company\Process\
In a package(say Package1) this project param is used in the package variables to identify the value
Name - Pkg_Local_Dir
Value - REPLACE( #[$Project::Param_Local_Dir], "Company", "AA")
The project was deployed into SQL Server using project deployment model and it was running with no issues through a scheduled job.
Now I need to deploy the package into the SQL Server as there is some changes(Integration Services Catalog -> project1 - right click -> Deploy Packages)
When I select the package from the package deployment window, it gives following error -
TITLE: SQL Server Integration Services
Warning:
The variables "$Project::Param_Local_Dir" were not found in the variable colletion. The variables might not exist in the correct scope.
Error:
1. The expression for variable "Pkg_Local_Dir" failed evaluation. There was an error in the expression.
We are not in a condition to do the whole project deployemnt again as there are many packages and this is the only package that is changed.
Is there any way this error can be fixed in order to do a package deployment?
Project Deployment mode and Package Deployment are completely different beasts. You cannot refer Project parameters within a Package deployed in Package deployment mode . That is the reason you are getting the errors.
In SSIS 2016 you can deploy single package from your project staying in Project mode, but not in SSIS 2012 or 2014.
In your case I would unload the Project from server, do necessary modifications to the package and deploy the updated Project back.

SSIS Main Package throwing Error : Package Failed Validation From Execute Package Task

i have a Main Package and 2 child packages(Load and Export). i have both child packages on the server in shared folder. when i execute Main Package its giving me the following Error for one of the Child package.
Error: Error 0xC0012050 while loading package file "\mhfile02\DIRFILEDEV\CHG77253\SSIS Packages\AaeAutoenrollee_Load.dtsx". Package failed validation from the ExecutePackage task. The package cannot run. .
Can anybody tell me what could be wrong?
Thanks
Are you running the package via SQL Server Agent?
Try running the child packages individually, it may be throwing other errors. If the package runs without error, the problem is probably on the Main package settings.
Some questions that may help you?
1. when you loaded the packages to the server, did you set any Protection Level (eg encrypt sensitive data with key, user key, etc?) setting these can make a package fail loading when run via SQL Server Agent
2. Try adding /msdb/ to the path of the child package.
If you are connecting in the child package to an Excel file,
and you set on the child solution property page
Under -
"Configuration Propeties"
"Debugging"
the variable "Run64BitRunTime" = False
You have to do it also on the Parent Package!
This error message means that your child package will not pass the validation. Check your child package to see if there's any task inside that does not pass the validation (a red cross appears beside it).
Maybe you have something being dynamically created that is used in such task (like constructing the connection string at runtime for some connection manager). Try set this task's DelayValidation property to True.
From one day to another, I got this error in Visual Studio / SSDT too (VS 2013, with SSIS 2014). Note: I have project deployment model, not package deployment.
I have ProtectionLevel = EncryptSensitiveWithPassword.
In the master package, on all package execution tasks, I had to retype the password for the sub-packages again. After that, it worked again. I guess the master package had some corruption, no idea why.
Greetings,
Roli
If you are connecting in the child package to an Excel file, then set DelayValidation = False on the child package excel connection manager.