SSIS Connection Manager Does Not Exist - sql-server

I have created a database through a task script in SSIS. When I later try to connect to that database through the Connection Manager I am told that the Connection Manager does not exist. The database is there in the server.
How can I establish the connection to the database to load the data after I've created a new DB in the script?
Error: The connection "Data Source=..;Initial Catalog=8888888;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;" is not found. This error is thrown by Connections collection when the specific connection element is not found.
From the Microsoft Forums The connection "" is not found from..
Similar question: SSIS Connection not found in package

You will need a ConnectionManager. It's an object in your project (assuming you are working in a project...) which you can add. This ConnectionManager can then be modified in order to not use a static connectionstring but to use a variable instead. This string variable as you already mentioned has then to be populated with the correct string. This can be done within your script task

Related

Use dynamic variable in SSIS to connect to SQL Server

I have an SSIS Package that has an OLEDB/ADO.NET connection manager that connects to a SQL Server database.
I need to take the value of the connection string for this connection manager from a file located in a set place on the SSIS Machine.
I have created a variable called CrmSqlConnectionString that is initialized with a value of "example".
The first thing that runs in the package is a Script Task that loads the file and updates the variable to the correct connection string.
When I try to run it in Visual Studio I get the following exception:
Error at Data Flow Task [ADO NET Source [16]]: ADO NET Source has failed to acquire the connection {GUID} with the following error message:
"Cannot open database "example" requested by the login. The login failed. Login failed for user 'MAIN\name'.".
Error at Data Flow Task [SSIS.Pipeline]: ADO NET Source failed validation and returned error code 0xC0208449. Error at Data Flow Task [SSIS.Pipeline]: One or more component failed validation. Error at Data Flow Task: There were errors during task validation. (Microsoft.DataTransformationServices.VsIntegration)
I tried to set the DelayValidation property on the connection manager to true and I still get this error.
Does anyone have a solution for this situation?
Thanks
DelayValidation property should be set to True on Data Flow Task. Not on the Connection Manager. This is exactly for this purpose.
Prototype is working on my PC. The picture below shows how it is set.
I've created connection manager with false connection data, and create an XML file located in my computer using Package Configuration.
Package Configuration helps me to config the connection string without throwing error.
recommend to use it if you need to set your connection string for two or more environments.

SSIS: Configuration of Dynamic Connection String Integrated Security Mode

Setup
In the local environments, we're using SQL Authentication with Username and Password to connect to the databases. I created a Project Connection Manager that has expressions bound to Project Properties, Username and Password being set to sensitive.
On the dev server, when the SSIS run, it needs to use an AD account. I might need to create a Credential/Proxy for the SQL Agent, but for now I'm logged in as the user and I execute the packag through SQL.
Problem
In the SSIS project itself, I'm trying to configure a dynamic connection string to use Integrated Security in one case, and SQL Account in another. I just can't figure out how to do it. Things I tried:
1- Created a boolean "UseIntegratedSecurity" parameter. In the connection string, use that bool to set IntegratedSecurity=SSPI or not with the expression, and also use expressions to set the other attributes of the connection string individually. It didn't work, said the connection string could not be built.
2- Created a boolean "UseIntegratedSecurity" parameter, and write my connection string as something (ugly) like: #[$Project::IntegratedSecurity] ? "Data Source="+#[$Project::SqlServerName]+";Initial Catalog="+#[$Project::SqlServerDatabase]+";Provider=SQLNCLI11.1;Auto Translate=False;Integrated Security=SSPI;" : "Data Source="+#[$Project::SqlServerName]+";Initial Catalog="+#[$Project::SqlServerDatabase]+";Provider=SQLNCLI11.1;Auto Translate=False;User ID="+#[$Project::SqlServerUsername]+";Password=" + #[$Project::SqlServerPassword]
It didn't work because since SqlServerUserName and SqlServerPassword are sensitive, it refuses.
3- Tried having Project Parameters for ConnectionString, Server, Database, User, Password and setting them all. Works locally, but on the server, I get "Invalid Authorization Specifications".
Ideas?
Thanks
You need to handle situation when in one environment you have to use SQL Authentication, and on the other - AD Authentication.
This can be done with help of SSIS Catalog Environment variables. When you create a Project file, Visual Studio automatically creates the following so called project connection parameters for each OLEDB connection manager :
CM.< conn manager name >.ConnectionString
CM.< conn manager name >.InitialCatalog
CM.< conn manager name >.Password Created as sensitive param
CM.< conn manager name >.ServerName
CM.< conn manager name >.UserName
OLEDB is an example, SSIS creates similar parameters for other connection manager types.
Important fact, you do not have to create additional project parameters. The parameters mentioned are created on project being built and are present on all projects.
We create environment variables which specify connection string, DB name (initial catalog), Server Name etc. Good thing - Connection string variable is applied first, and then amended with the other variables.
More details on these parameters is in MS Docs.
In case similar to yours, in Dev environment - using SQL Auth define Conn string for SQL Auth and specify username and password in corresponding variables. In QA env where SSPI is used - the Connection string is reworked for SSPI, UserName and Password environment variables are empty.

SQL Server Integration Services. Dynamic changing of connection string by package parameters inside of foreach

I need to get data from several databases using SQL Server Integration Services (more than 20) and for each of them execute the package that transfers the data to a target database, there is a table with a list of connection strings of these databases in other database.
I try to execute the ExecutePackage task inside foreach task and send connection string from query as package's parameter, also I send connection string of target database and date. But package stops with error:
[Importing [11]] Error: SSIS error code: DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The call to the AcquireConnection method of the connection manager "targetdb" failed with error code 0xC0202009. You may have previously published error messages that contain more detailed information about the reason for the failure of the AcquireConnection method.
I think the connection manager of targetdb does not pass validation, in this case I run package directly from Visual Studio. When I run package separately (not inside foreach and with default parameters), then it works right.
Is it right way for my task?
Decision was simple. I set DelayValidation property to true for package, which executed inside foreach loop, it decided problem.

SSIS Package with Dynamically creating Excel destination is not working from SQL Server Jobs

I'm currently working on a requirement to get data from sql server into Excel destination. I used the exact method from this link " https://sqljunkieshare.com/2012/02/28/how-to-create-and-map-excel-destination-dynamically-in-ssis/ " Except the Dynamical excel sheet name (Doesn't work, so removed the dynamical sheet naming and using a static name for all excel workbook)
Condition is : To get a set of distinct ID's from a view and should create an excel sheet for each ID and load the data from the same view with the filter of respective ID from the result Set.
The package worked fine when executed from Visual Studio designer. But i'm facing an error on Excel connection when executing this package from SQL Server job.
Here is the error message :
OnError 1 - Create Excel Sheet:Error:Failed to acquire connection "ExcelDestination". Connection may not be configured correctly or you may not have the right permissions on this connection.
OnError 2 -
GenerateExcel:Error: SSIS Error Code DTS_E_OLEDBERROR. An OLEDB error has occured. Error Code : 0x80004005.
An OLE DB record is available. Source:"Microsoft Access Database Engine." Hresult: 0x80004005 Description:"C:\Excel\ID_100.xlsx' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.".
on above GenerateExcel - package name
ExcelDestination - Excel connection manager name
ID_100 - first Excel workbook name (100 is the first ID).
I tried changing the DelayValidation property to True on everything, since the File path is on my local drive i don't think drive permission is an issue.

Parallels Plesk Panel connecting to database server connection string

I am using Entity Framework to access the data from my database. It's an MVC application and works fine locally. When I deploy the application on hosting (Parallels Plesk Panel, MS hosting) I get problems with accessing the SQL server instance. There are options in the cPanel which hold connection strings.
LocalSqlServer:
data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
xContainer:metadata=res:///Models.x.csdl|res:///Models.x.ssdl|res://*/Models.x.msl;provider=System.Data.SqlClient;provider connection string=
When I upload the site xContainer is generated alone. I found the sql server's instance name and applied it to the data source. In my web.config file I am using the the xContainer. The code after this paragraph is what it seems logic to me to add after the connection string= in the xContainer.
I have tried this with various properties. Data source, initial catalog, and the other info are filled into the conn string (here I am showing only /).
Data Source=x;Initial Catalog=/;Persist Security Info=True;User ID=/;Password=/;MultipleActiveResultSets=True providerName=
The error I receive is that the sql server instance cannot be found. If I add the last piece of code to the container it tells that I don't have a providerName, After adding a providerName the string is deleted to the starting xContainer string:
metadata=res:///Models.x.csdl|res:///Models.x.ssdl|res://*/Models.x.msl;provider=System.Data.SqlClient;provider connection string=
The error I receive is that the **sql server instance cannot be found**.
So, what is the SQL instance name? :)
it maybe not ".\SQLEXPRESS" but ".\SQLEXPRESS2012" or even ".\MSSQLSERVER" or anything else.
You will need to Edit the Web.Config file manually. The ASP.NET Settings page will remove the providerName.
An example of a connection string using EntityClient is below. You can remove the metadata information if you're not using an Entity Model. You will notice the providerName is outside of the actual connectionString and is the reason you will need to edit the file manually.
connectionString="metadata=ModelInformation;provider=System.Data.SqlClient;provider connection string="data source=IP;initial catalog=DATABASE;User ID=USERNAME;Password=PASSWORD;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient"

Resources