inserting excel data into SQL Server using SSIS - sql

I'm trying to insert excel data using Data flow task, Excel source to OLE DB Destination, my col names in the Excel file are in the following order
EmpId
Empname
Dept
Sal
StartDate
EndDate
EmpType
My question is do I need to define them in the same order as they are in the excel sheet or for e.g what if they are in the following order where StartDate preceeds Sal would it cause issues ?
EmpId
Empname
Dept
StartDate
Sal
EndDate
EmpType
As i'm getting the following errors when trying to run this package:
[Excel Source [37]] Error: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "Excel Connection Manager 2" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed.
[SSIS.Pipeline] Error: Excel Source failed validation and returned error code 0xC020801C.
[SSIS.Pipeline] Error: One or more component failed validation.
Error: There were errors during task validation.

Related

SSIS Package execution throw error DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER [duplicate]

This question already has answers here:
SSIS export to excel
(2 answers)
Closed 6 years ago.
We try to test the simple Import from Excel File saved on a shared path on a server into a SQL Table.
I created the Excel Connection Manager for the Excel source file 97-2003, First row has column names checked.
I created the OLEDB Destination with the selected Table and I mapped the columns.
So fine so good, but when we run the Package the following error is thrown:
Error: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.
The AcquireConnection method call to the connection manager "Excel Connection Manager"
failed with error code 0xC0202009.
There may be error messages posted before this with more information on why the AcquireConnection
method call failed.
What do we tried:
checked the access to the file
to set Delay Validation to True on Package Level
to recreate the Excel Connection Manager
to deploy the Package and execute inside the Integration Services Catalogs
There is no 64 bit driver for excel 97 - 2003 . The workaround is to run the package using the 32 bit version of the execution utility.
http://technet.microsoft.com/en-us/library/ms141766.aspx
For the design mode in the Project Properties->Degugging Section, set Run64bit RunTime to False

How to pass different excel files to Excel connection manager in SSIS?

I am passing different excel files to SSIS package. I am picking up from folder by using for each loop, mapped variable in that. I am passing that variable to Excel connection manager, but it is not taking. We are getting below error, but if we hardcode the excel file path it is working fine, but I want it should take from for each loop, because we are getting different Excel files, for example: abc.xls or abc(1).xls or abc 03-03-2016. How to handle this in SSIS?
Error:
TITLE: Package Validation Error
------------------------------
Package Validation Error
------------------------------
ADDITIONAL INFORMATION:
Error at Load Attendance data [Excel Source [1]]: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "Excel Connection Manager 2" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed.
Error at Load Attendance data [SSIS.Pipeline]: component "Excel Source" (1) failed validation and returned error code 0xC020801C.
Error at Load Attendance data [SSIS.Pipeline]: One or more component failed validation.
Error at Load Attendance data: There were errors during task validation.
Error at Tardy Load [Connection manager "Excel Connection Manager 2"]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft JET Database Engine" Hresult: 0x80004005 Description: "Invalid argument.".
(Microsoft.DataTransformationServices.VsIntegration)
------------------------------
BUTTONS:
OK
------------------------------
This is the approach we took to handle a similar problem:
The For Loop assigns the full path of the Excel file to a variable
In the Excel Connection Manager, set the ExcelFilePath element of the Expressions property to that variable
Inside the loop, we have a Script task that will extract the first sheet name assigning it to a ReadWriteVariable in the Script task:
public void Main()
{
string ConnectionString;
OleDbConnection ExcelConnection;
DataTable TablesInFile;
string FirstSheet = "";
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Dts.Variables["WorkingFolderAndFile"].Value.ToString() + ";Extended Properties=Excel 8.0";
ExcelConnection = new OleDbConnection(ConnectionString);
ExcelConnection.Open();
TablesInFile = ExcelConnection.GetSchema("Tables");
foreach (DataRow SheetInFile in TablesInFile.Rows)
{
FirstSheet = SheetInFile["TABLE_NAME"].ToString();
break;
}
Dts.Variables["WorkingSheetName"].Value = FirstSheet;
ExcelConnection.Close();
ExcelConnection.Dispose();
Dts.TaskResult = (int)ScriptResults.Success;
}
Then in the Excel Source Editor, for Data Access Mode, select: Table name or view name variable. And for the variable name, use the variable that contains the first sheet name that was assigned in the Script task.
Also for the Excel Source, you may also have to set these properties:
ValidateExternalMetadata = False
AccessMode = OpenRowset From Variable
OpenRowsetVariable = the sheet variable
Excel doesn't have the capability to regenerate every time, The same package with CSV will work fine.
But, iF you want to use the excel file for sure then Use an Execute SQL task and use an excel connection manager and add the script.
Example:
CREATE TABLE
`Excel Destination` (
`PromotionKey` INTEGER,
`PromotionAlternateKey` INTEGER,
`EnglishPromotionName` NVARCHAR(255),
`SpanishPromotionName` NVARCHAR(255),
`FrenchPromotionName` NVARCHAR(255),
`DiscountPct` DOUBLE PRECISION,
`EnglishPromotionType` NVARCHAR(50),
`SpanishPromotionType` NVARCHAR(50),
`FrenchPromotionType` NVARCHAR(50),
`EnglishPromotionCategory` NVARCHAR(50),
`SpanishPromotionCategory` NVARCHAR(50),
`FrenchPromotionCategory` NVARCHAR(50),
`StartDate` DATETIME,
`EndDate` DATETIME,
`MinQty` INTEGER,
`MaxQty` INTEGER
)
The query will generate a new excel file everytime you run the package and will solve your issue.
Hope it solves your issue.
Create a variable Excel File source as String and add the location of excel folder ,
create another variable excel file Name as a string and also add one file name to it .
Go back to your connection manager , on one of your excel file ...right click to to properties , under expressions select Excel file Path then #[$Package::ExcelFileSource]+"\"+ #[$Package::ExcelFileName]. This will let you not hard code your excel file names .

SSIS: Export to Dynamic Excel File

I am trying to create a project that will produce a separate excel file for every account in a specific table. The first steps to pull the data into a temp file and load an array variable with the accounts for the loop, this is working fine.
I am getting the 2 errors below. And when I execute the package it fails on the export to excel data flow task.
Error 1 Error loading RAW_DATA_EXPORT.dtsx: The connection string
format is not valid. It must consist of one or more components of the
form X=Y, separated by semicolons. This error occurs when a connection
string with zero components is set on database connection manager.
Error 2 Error loading RAW_DATA_EXPORT.dtsx: The result of the
expression ""\\server\DATA\Status\Testing\Filename" +
#[User::Accts] + ".xls"" on property "ConnectionString" cannot be
written to the property. The expression was evaluated, but cannot be
set on the property.
This is what my dynamic connection string looks like evaluated:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\server\DATA\Status\Testing\Filename03500.xls;Extended Properties="EXCEL 8.0;HDR=YES";
I think the issue is since the excel file are non-existent, the validation fails when it gets to the step. From what I found online I need to either create the sheets through a a script task (not fond of) or use a variable value to create the sheet in the file. I have not been successful on either.
(...) since the excel file are non-existent, the validation fails when it gets to the step.
Have you tried delaying validation in the Data Flow task that exports to Excel? Check Data Flow's properties window.

range.copy method throwing unexpected error

I have the following code to copy data between 2 different excel files
xlRangeSource = xlsheetSource.Range("B2:K" & IntAmountOfRows)
xlRangeTarget = xlsheetTarget.Range("A" & intStartOfEmptyRow)
xlRangeSource.Copy(Destination:=xlWbTarget.Worksheets(xlsheetTarget).range(xlRangeTarget))
IntAmountOfRows and intStartOfEmptyRow are both integers
When executing my code, I get the following error:
Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
However, I am using a range to copy to a range. I don't understand why the types are a mismatch

unable to take Date dynamically every day in ssis

I have created SSIS to generate a excel file from sql
and giving file name dynamically depending upon todays date.
I have not yet deployed package because of testing.
When I changed System date to test wether it is able to create file for that date or not
but it is giving me an following error
Error at Data Flow Task [Excel Destination [34]]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E37.
Error at Data Flow Task [Excel Destination [34]]: Opening a rowset failed. Check that the object exists in the database.
Error at Data Flow Task [SSIS.Pipeline]: "component "Excel Destination" (34)" failed validation and returned validation status "VS_ISBROKEN".
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)
In excel connection manager i have set property excelfilepath in expression
code is #[User::ExcelFileName] + (DT_WSTR, 20) (DT_DBDATE) GETDATE()+".xls"
which is giving evaluated value like C:\2013-05-24.xls
How do I resolved it.
To fix this issue. In the Excel connection manager properties you have to set the "DelayValidation" property to TRUE.