Migrating SSIS Package Using Excel Interop To Server
Apr 28, 2008
I applied the following info and created an SSIS package that allows COM control of Excel:
unable to add reference to Microsoft Excel in VSA
The package runs locally, and can be executed successfully after it is migrated to the server, but both of these processes use local memory space (I think). When I try to run the package via a job, it fails with the following error:
Executed as user: ALEREsql_admin. ...on 9.00.3042.00 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 10:34:04 AM Error: 2008-04-28 10:34:06.73 Code: 0xC001405F Source: Description: Failed to decrypt an encrypted XML node because the password was not specified or not correct. Package load will attempt to continue without the encrypted information. End Error Progress: 2008-04-28 10:34:09.34 Source: Data Flow Task Validating: 0% complete End Progress Error: 2008-04-28 10:34:09.45 Code: 0xC0202009 Source: msr_uhc_pc Connection manager "Excel Connection Manager" Description: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040154. An OLE DB record is available. Source: "Microsoft OLE DB Service Components" Hresult: 0x80040154 Description: "Class not registered". End Error Error: 2008-04-28 10:34:09.45 Code: 0xC020801C Source: Data Flow Task... The package execution fa... The step failed.
As painful as it is proving out to be, I am trying to create a single package that is vendor neutral between SQL Server and Oracle.
At first, I thought that as long as I was going OLEDB in and out, and I ensured that my SQL syntax was generic enough, I'd be OK.
Well, not exactly. I am finding there is more to this. Specifically, metadata gets generated differently based on the source/targets.
For example, on an OLE DB Source task, datatypes will vary (i.e. NUMBER in Oracle vs Int in SQL). The job here is to pick the common denominator for the SSIS specific type. Time consuming, but doable, I think.
Another issue is on an OLE DB Desitnation. If you choose Table for Data Access Mode, this value gets written to the dtsx XML file. So, even when both RDBMS have the same schema (which is an obvious prereq) if choosing SQL Server "dbo.DimTable" will get written to the file and for Oracle "SCHEMA.DIMTABLE" will get written.
So, I am am wondering, what is the best way to address this?
My inital thought was using a dtsConfig file (which I am already using extensively) and set the target table names accordingly. This approach would have the added benefit of allowing for post-deployment configuration changes should a table name change, for example.
This section of the dtsx file shows the values of interest:
Code Snippet <component id="138" name="OLE_DST_DimTable" componentClassID="{E2568105-9550-4F71-A638-B7FE42E66922}" description="OLE DB Destination" localeId="-1" usesDispositions="true" validateExternalMetadata="True" version="4" pipelineVersion="0" contactInfo="OLE DB Destination;Microsoft Corporation;Microsoft SqlServer v9; (C) 2005 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;4"> <properties> <property'>http://www.microsoft.com/sql/support;4">http://www.microsoft.com/sql/support;4"> <properties> <property id="139" name="CommandTimeout" dataType="System.Int32" state="default" isArray="false" description="The number of seconds before a command times out. A value of 0 indicates an infinite time-out." typeConverter="" UITypeEditor="" containsID="false" expressionType="None">0</property> <property id="140" name="OpenRowset" dataType="System.String" state="default" isArray="false" description="Specifies the name of the database object used to open a rowset." typeConverter="" UITypeEditor="" containsID="false" expressionType="None">"ORASCHEMA"."DIMTABLE"</property> <!-- More Properies --> </component>
Ideally, I'd like configuration time control over the name attribute of the component element (highlighted) so that I can set the value of the property element with the OpenRowset attribute type (also highlighted). This way, presumambly as long as datatypes were generic enough, the mapping would just work.
But, in walking through the dtsConfig tree, I don't see these elements or attributes exposed.
I would sincerely appreciate any suggestions on how to accomplish this.
What is the proper method of using the Excel.Interop assemblies with SSIS? I am using SQL Server 2005 Integration Services (VS 2005) against the .NET Framework v2.0.50727 with the Microsoft.Office.Interop.Excel.dll assembly.
I find that the referenced instance of Excel in my SSIS package is not always released from memory as expected. I'm not sure that I have a problem per se, but I am interested in knowing the Microsoft reccommended method of using the Office Interop assemblies with SSIS.
For this thread, "working" code is defined as observing the appearance and disappearance of the Excel.exe image in the Task Manager as it is created and destroyed in the SSIS package.
The following Sript Task code (between stars) works as expected in that the image of Excel can be seen created and removed from the Task Manager list of processes:
************************************************
Imports Microsoft.Office.Interop.Excel
Public Sub Main()
Dim mobjExcelApp As Microsoft.Office.Interop.Excel.Application
Dim mobjWorkbook As Microsoft.Office.Interop.Excel.Workbook
Dim objSheet as Worksheet
Dim strExcelFilename as string = "C:TempMyExcelfile.xls"
Dim strSheetname_ValidSamples as String = "Sheet1"
mobjExcelApp = New Microsoft.Office.Interop.Excel.Application
the code will work fine with no errors, however, the Excel image is not removed from the task list. I have found that the instance will disappear upon waiting (several minutes or more).
I have one SSIS package which is written in Visual studio business intelligence tool. For that SSIS packages i have scheduled a job from SQL server management studio 2005. I mean i have scheduled a job in SQL server agent. This job which i have scheduled contains 6 SSIS packages and the other 5 SSIS packages executes successfully but this only fails giving sone com.Interop exception.
But it is failing giving some com.interop exception. Not sure what type of error is this?
It give following type error:
Microsoft (R) SQL Server Execute Package Utility Version 9.00.3042.00 for 32-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 11:00:00 PM Error: 2008-03-27 23:00:00.81 Code: 0x00000000 Source: Execute DTS 2000 Package Task Description: System.Runtime.InteropServices.COMException (0x80040427): Execution was canceled by user. at DTS.PackageClass.Execute() at Microsoft.SqlServer.Dts.Tasks.Exec80PackageTask.Exec80PackageTask.ExecuteThread() End Error DTExec: The package execution returned DTSER_FAILURE (1). Started: 11:00:00 PM Finished: 11:00:00 PM Elapsed: 0.579 seconds. The package execution failed. The step failed.
I get the same error when i try to execute the package from Visual studio Business Intelligence tool.
Can you please help me out as to what is this "System.Runtime.InteropServices.COMException" exception occuring when scheduling or executing the job.
I have created a simple SSIS package in a 32-bit server and I'm able to execute it using dtexec command in the same server.I copied this package to the 64-bit machine and when try to execute the pacakge using dtexec /f <package path> ,it is giving me the following error
"The connection manager "10.101.24.230.master 1" will not acquire a connection because the package OfflineMode property is TRUE. When the Offline Mode is TRUE, connections cannot be acquired." But in SSIS designer OfflineMode property for the package is by default set only to false but still I get this error in 64-bit. Any help in this regard would be appreciated. Thanks SG
I have successfully used migrate wizard to migrate DTS pacakge to TrainingDTS.dtsx. What should I do next? when I run
C:>dtexec /file "C:TrainingDTS.dtsx"
Error: 2008-05-13 09:14:31.36 Code: 0xC0029172 Source: File Transfer Protocol Task undefined FTP Task Description: The connection is empty. Verify that a valid FTP connection is p rovided. End Error Error: 2008-05-13 09:14:31.36 Code: 0xC0024107 Source: File Transfer Protocol Task undefined Description: There were errors during task validation. End Error DTExec: The package execution returned DTSER_FAILURE (1).
I have to create a migration package ..means package should migrate the sql server 2000 tables to 2005 tables (Not dealing with data at this point of time and ignoring SPs,DTS packages).But there are lot of normalisation ans schema changes in 2005 compared to 2000.Like,
- One 2000 table devided into 3-4 tables in 2005 - Lot of changes in the filed names - Handling integrity relationship between the newversion tables
Being new to SSIS ,iam in confusion like how to start and where to start.can you pls tell me the steps(Structured way) i have to fallow
-- I have around 8-9 tables in 2000 ,I have to migrate them into 18-19 tables (with some new fileds )
-- For each table i have to create one package(bcoz lot of transformations are there) or I can create one package for all of those ? but the finally i have to handover one package to the client
pls ask me if u need any further info to come up with the explanation..bcoz iam not sure whether i provided enough info or not
I've SQL Server running on 64 bit. When I schedule a package to run every night which has excel data transformation, it fails. Initally I had a problem running through BIDS also but then I found in project properties you can switch this off by specifying property Run64BitRuntime by false. After going through some forums, many have suggested that when scheduling a package, modify the command arguments to run as 32bit runtime. These command argumnents can be generated from making use of tool DTExecUI.exe Even after using generated command arguments from this tool, it doesn't help.
Below is my command argument and the error message generated.
Message Executed as user: DWUserSQLServiceAcc. ...0.3042.00 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 00:05:00 Error: 2008-05-28 00:06:02.31 Code: 0xC0202009 Source: Excel Load Connection manager "Excel Connection Manager" Description: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040154. An OLE DB record is available. Source: "Microsoft OLE DB Service Components" Hresult: 0x80040154 Description: "Class not registered". End Error Error: 2008-05-28 00:06:02.31 Code: 0xC020801C Source: Copy Data Excel Source [5052] Description: 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. End... The package execution fa... The step failed.
I have a SSIS package running well in production however sometimes the package will fail when the excel file contains more than 25000+ rows.
The SSIS package is run by SQL Server Agent and is set to run in 32bit mode.
I checked the data by loading in batches and all data loaded successfully. But the funny thing is when I run the same package on my local development PC using BIDS and the same data file. The package loads all 25000+ rows successfully.
Is there some setting that is preventing all rows loading in the server environment.
I have a SSIS package which reads an excel file and loads data into a table using script component(C#) as a source. The package runs without any errors when I manually run it on my machine and on the server. But the package fails when run as a SQL Server Agent job.
I tried all the possible fixes I found on the web but still can't get it to work.
Hello,I have got the job to migrate data from an Excel-sheet to asql-server-database. I have a lot of experience with Access butSql-Server is not in my line.So who can give me some advice about how to do this job?thanx for your help, Helmut
I have created a SSIS package which is getting data from SQL Server table to Excel File.
Step 1 : using Oledb to get records. Step 2 : created Excel Connection and Excel Destination component Step 3 : Configured the Excel File Path using variables. Step 4 : Changed the property 64 bit FALSE
When try to run from BIDS it is running fine. But It is not running when try to run from SQL JOB.
The following Error i got:
: 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. ::: component "Excel Destination" (588) failed validation and returned error code 0xC020801C. ::: One or more component failed validation. ::: There were errors during task validation. ::
I currently have a export that takes data from my SQL Server 2005 DB and exports it into Excel. This process works correctly. My excel template has the first row headers and the data is dumped in the row after the header. I would like to know if it is possible for me to add borders around my data without doing it within the template? I don't know how much data is going to be exported so I can't put borders within the template. I put borders around the headers to see if it will copy the formatting down to the data and it didn't. Thank You for any help.
Is it possible to create a package through the SQL Server Business Intelligence Studio, and then execute that package through an Excel file (by calling the package through VBA?).
I need some advice on the ways I can execute the package other than via command line utilities. Can you use Visual Basic 6.0? .NET?
I am new to SSIS and I need a jump start on how I can use filters to filter out some data based on criteria in the form of EXCEL Work Book.
I have a Owners table for which the filters of Brand, Number etc are applied and the records which pass the filters are to be updated in to the new table.
Any ideas on how we can do this??? Thanks in Advance..
I am exporting data to excel with ssis package.In my system it is working fine., but in server it is giving this error.All the connection string for database and excel file path are coming correct in run time with the help of package configeration. one more thing is if we execute directly the package by double clicking in server it is working, but through my application it is giving this error.
An OLE DB error has occurred. Error code: 0x80040E09. The ProcessInput method on component "Excel Destination" (22) failed with error code 0xC0202009. The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. Thread "WorkThread0" has exited with error code 0xC0202009.
When I want to execute my package as a job in a SQL Server 2005, I get this Message:
Executed as user: EDAsvcSQLServerPMS. ....00.3042.00 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 09:46:00 Error: 2008-05-16 09:46:01.41 Code: 0xC0048020 Source: Data Flow Task Data Flow Task (DTS.Pipeline) Description: The version of component "Excel Source" (1) is not compatible with this version of the DataFlow. End Error Error: 2008-05-16 09:46:01.54 Code: 0xC0048020 Source: Data Flow Task DTS.Pipeline Description: The version of component "Excel Source" (1) is not compatible with this version of the DataFlow. End Error Error: 2008-05-16 09:46:01.54 Code: 0xC0048021 Source: Data Flow Task Excel Source [1] Description: The component is missing, not registered, not upgradeable, or missing required interfaces. The contact information for this component is "Excel Source;Microsoft Corporation;Microsoft SqlServer v9; (C) 2005 Microsoft Corporation; All Rights Reserved; http://ww... The package execution fa... The step failed.
The package works fine on the developed server but when I try it out on our integration server it won't go through without these errors. The protection level is set on DontSaveSensitiv and allready I had an error less.
I hope someone can help me, because I can't find anything with google. Thanx!
Hello everybody... I have a very simple SSIS package that loop throught the worksheets of an Excel file and insert the data into a SQL server 2005 table.
The SSIS is very simple and works fine the problem is that after the Package executes if I double click on the Excel file imported I have the message that the file is in use.
I think that the Excel connection manager of the package doesn't release the Excel resourse but this is only a guess..
Do am I right? If yes how can I release the resource?
Academy details tables, Academy Students table, Academy Student Parents table, Academy class Section Table, Academy Staff table.
I have created the tables and data into the database. And Now I need to prepare a Excel sheet to upload data into the these tables. How to prepare the Xlsx sheet and how to upload into database without using SSIS package.
I have package which pulls data from db table and creates a excel file extract.The flow is like this - A excel file template sits in the input folder folder for processing .The package starts by dropping excel sheet in the excel(which is clearing any data and columns available) once that is done it has script task which creates a new columns for the sheet and gives a sheet name as well .Then a execute sql task runs and pumps data into a table which serves as a source for the excel extract process .The excel extract process involves pulling data from the table and doing data conversion before it moves it into the oledb destination (excel file on file server).When I run the package I go and see that data is pushed down . I see top rows say 100 are empty and data appears after say 100 rows .
I tried deleting excel file and replacing with new one empty with columns and sheet name only but still it doesnt work?I am trying to understand what is making ssis behave like this and what can I do overcome the problem ?I read on google that we need to bring in file system task will move a template to working directory which is input folder but I dont want it to incorporate that logic as we need to push this package to production ASAP with very minimal change.
Trying to upload excel in server where excel is not installed. BIDs was there in the server, when i am trying to craete Excel source I am not able.what the workround for this.. How to upload excel without excel installed on the server.
I am designing a web app using sql server 2005 as a the backend. I have spent an enormous amount of time designing the db tables and ensured that they are normalised. Many, as you would expect have reference to what I would call indexes which are linked via foreign keys. This may be a really dumb question but..... How do I make a lookup referential table where the integers become categories not an exact reference value (just like we do when we use vlookup in excel)?
Sorry but I am a little confused.....Thanks for your help guys.
Would you happen to know how one could convert some Excel spreadsheets to MSSQL? There is some commercially available software, but there must also be a way for me to manipulate the files.
The master package has a configuration file, specifying the connect strings The master package passes these connect-strings to the child packages in a variable Both master package and child packages have connection managers, setup to use localhost. This is done deliberately to be able to test the packages on individual development pc€™s. We do not want to change anything inside the packages when deploying to test, and from test to production. All differences will be in the config files (which are pretty fixed, they very seldom change). That way we can be sure that we can deploy to production without any changes at all.
The package is run from the file system, through a job-schedule.
We experience the following when running on a not default sql-server instance (called dkms5253uedw)
Case 1: The master package starts by executing three sql-scripts (drop foreign key€™s, truncate tables, create foreign key€™s). This works fine.
The master package then executes the first child package. We then in the sysdtslog get:
Error - €ścannot connect to database xxx€? Info - €śpackage is preparing to get connection string from parent €¦€?
The child package then executes OK, does all it€™s work, and finish. Because there has been an error, the master package then stops with an error.
Case 2: When we run exactly the same, but with the connection strings in the config file pointing to the default instance (dkms5253), the everything works fine.
Case 3: When we run exactly the same, again against the dkms5253uedw instance, but now with the exact same databases defined in the default instance, it also works perfect.
Case 4: When we then stop the sql-server on the default instance, the package faults again, this time with
Error - €śtimeout when connect to database xxx€? Info - €śpackage is preparing to get connection string from parent €¦€?
And the continues as in the first case
From all this we conclude, that the child package tries to connect to the database before it knows the connection string it gets passed in the variable from the master package. It therefore tries to connect to the default instance, and this only works if the default instance is running and has the same databases defined. As far as we can see, the child package does no work against the default instance (no logging etc.).
We have tried delayed validation in the packages and in the connection managers, but with the same results (error).
So we are desperately hoping that someone can help us solve this problem.
I've migrated a package that has worked in our development environment. In both environments (dev & staging) I am in the BUILTIN/Administrators local group which is in the sysadmin server role.
In our staging environment, I execute DTEXEC command from the command line and get the following results.
D:Reporting>"D:Program FilesMicrosoft SQL Server90DTSBinnDTEXEC.EXE" /SQL "MSDBProcessReportingDatabase" /SERVER USFKL16DB1CI01 /MAXCONCURRENT " -1 " / CHECKPOINTING OFF /REPORTING V /SET "Package.Variables[User::RunID].Value";65 / SET "Package.Connections[RSAnalytics].InitialCatalog";"VR New Test 1 Dec28-FndPrj 1 Dec28" Microsoft (R) SQL Server Execute Package Utility Version 9.00.1399.06 for 32-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved.
Started: 1:46:43 PM Could not load package "MSDBProcessReportingDatabase" because of error 0xC0014062. Description: The LoadFromSQLServer method has encountered OLE DB error code 0x80004005 (Login timeout expired). The SQL statement that was issued has failed. Source: Started: 1:46:43 PM Finished: 1:47:02 PM Elapsed: 18.797 seconds
In addition to my login, all logins that access this package are in the sysadmin role; and I have gone back and included these logins in msdb's dts_operator role. Has anyone seen this before?
Hey, I've a few jobs which call SSIS packages. If I run the SSIS package, it runs fine but if I try to run the job which calls this package, it fails. Can someone help me troubleshoot this issue? None of my jobs that call an SSIS package work. All of them fail.
i have an SSIS package that exports to an excel file. This works fine. the problem is that it appends the data instead of overwriting the file. Is there any way to overwrite the file like you can with a flat file? I have to email the file everyweek and don't want to have to clear it out manually. Any help would be appreciated
I have lots of DTS packages and jobs in SQL 2K, we are planning to migrate to SQL 2005. Will my DTS and jobs still work? If not, what are the procedures for migration. thanks
I am tasked with migrating a few DTS packages to SSIS from 32bit 2000 box to 32 bit 2k5 box. These DTS packages contain simple processing of AS cubes. When I run the wizard to migrate the package on my sql 2k5 box, I get the following error during processing:
Could not load file or assembly "Microsoft.SqlServer.Exec80PackageTask, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.
and the wizard shows the status being "Stopped". I found the Microsoft.SqlServer.Exec80PackageTask.dll on a 64 bit server located in C:Program Files (x86)Microsoft SQL Server90DTSTasks and copied it to the 32 bit 2k5 box. This still did not work and the error log produces ........... LogID=4 #Time=9:53 AM #Level=DTSMW_LOGLEVEL_ERR #Source=Microsoft.SqlServer.Dts.MigrationWizard.Framework.Framework #Message= at Microsoft.SqlServer.Dts.MigrationWizard.TasksMigrationModules.CustomTaskMigrationModule.Migrate(Task task, Package& yukonPackage) at Microsoft.SqlServer.Dts.MigrationWizard.Framework.Framework.MigrateTasks(DTS8Package shilohPackage, Package& yukonPackage) ........... LogID=6 #Time=9:53 AM #Level=DTSMW_LOGLEVEL_ERR #Source=Microsoft.SqlServer.Dts.MigrationWizard.Framework.Framework #Message=Microsoft.SqlServer.Dts.MigrationWizard.HelperUtility.DTSMWException: Could not load file or assembly 'Microsoft.SqlServer.Exec80PackageTask, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified. ---> System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.SqlServer.Exec80PackageTask, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified. File name: 'Microsoft.SqlServer.Exec80PackageTask, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' at Microsoft.SqlServer.Dts.MigrationWizard.TasksMigrationModules.CustomTaskMigrationModule.Migrate(Task task, Package& yukonPackage) at Microsoft.SqlServer.Dts.MigrationWizard.Framework.Framework.MigrateTasks(DTS8Package shilohPackage, Package& yukonPackage) WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) to 1. Note: There is some performance penalty associated with assembly bind failure logging. To turn this feature off, remove the registry value [HKLMSoftwareMicrosoftFusion!EnableLog].
I also tried re-installing the backward compatability components to no avail. Any ideas?
Getting error even remove Text (Source) task in DTS. Pl. help me . Thanks, Raja
Error:
LogID=23 #Time=11:32 AM #Level=DTSMW_LOGLEVEL_ERR #Source=Microsoft.SqlServer.Dts.MigrationWizard.Framework.Framework #Message=Microsoft.SqlServer.Dts.Runtime.DtsRuntimeException: Failed to save package file "C:PONE_SSIS_PACKAGESPONE_SSIS_SELLTHRUPONE_DTS_SELLTHRU_TEST.dtsx" with error 0x80004005 "Unspecified error". ---> System.Runtime.InteropServices.COMException (0xC001100E): Failed to save package file "C:PONE_SSIS_PACKAGESPONE_SSIS_SELLTHRUPONE_DTS_SELLTHRU_TEST.dtsx" with error 0x80004005 "Unspecified error".
at Microsoft.SqlServer.Dts.Runtime.Wrapper.ApplicationClass.SaveToXML(String FileName, IDTSPersist90 pPersistObj, IDTSEvents90 pEvents) at Microsoft.SqlServer.Dts.Runtime.Application.SaveToXml(String fileName, Package package, IDTSEvents events) --- End of inner exception stack trace --- at Microsoft.SqlServer.Dts.Runtime.Application.SaveToXml(String fileName, Package package, IDTSEvents events) at Microsoft.SqlServer.Dts.MigrationWizard.DTS9HelperUtility.DTS9Helper.SaveToXML(Package pkg, String sFileLocation) at Microsoft.SqlServer.Dts.MigrationWizard.Framework.Framework.StartMigration(PackageInfo pInfo)