Is It Possible To Create A Class Library That I Can Import Inside Script Components In My Package?
Dec 27, 2007
Good day everyone,
I have a package that loads data from a flat file, performs some transformations and then inserts the final data into a DB destination. The keys for the different DB records are generated in Script components in the Data Flow Tasks.
My question is concerning the Key Generation and I'll try to explain it on a simple example.
Package Structure:
The Control Flow contains two Data Flow tasks.
Each of the Data Flow Tasks contains a Script Component responsible for generating the keys of the records to be loaded during this data flow.
The code of the Script component is the following:
' Field Definitions '
Private seed1 As Integer
Private seed2 As Integer
' Constructor '
Public Sub New(ByVal dbSeed1 As Integer, ByVal dbSeed2 As Integer)
.....
End Sub
' Generates the keys according to the seeds retrieved from the DB '
Public Function getNextKey() As Int64
...
...
Return generatedKey
End Function
End Class
Public Class ScriptMain
Inherits UserComponent
Private generator As New KeyGenerator(7, 5)
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
....
Row.NewKey = generator.getNextKey()
End Sub
End Class
Questions:
As you can see the KeyGenerator class code gets duplicated in each Script Component, which is definitely a bad practise. What I wish to do is to create the KeyGenerator class and deploy it as a library "somewhere". Then, in each Script Component, I should only import the KeyGenerator class.
1. Is that possible?
2. If yes, how can I do this?
3. If not, what is a best practise you would recommend which allows me to avoid this code duplication of the KeyGenerator class?
I´m wondering if is it possible to use the SSIS Class Library without SQLServer installed in the machine or if is it necessary to install SLQ Server in order to use SSIS objects?
Hi All, Now I am creating .Net CF2.0 class library project, and I have some public method which take parameters. And I commented those method using following tag.
But when I add to other project where I wanted use that dll , when I create instance and call the method it€™s not giving me the description which I gave. But when I refer in the same class library project itself it€™s giving outside that it€™s not giving the details. Could you please anyone to solve this problem ?? Thanks , Jayakumar a
I'm trying to use the Data Access Application block, and am having some issues with configuration. I am using it in a class library, and it seems that with v 3 you need to configure the DAAB first, making changes to the configuration file. However, in a class library, I do not seem to have the web.config or app.config file to change. So where do I need to store the configuration settings? Thanks, Paul
Hi There!I have a big application which has two parts. A back-end developed in Deplhi 7 for desktop and a front-end developed in ASP.net C#. The problem I am facing is to integrate the login between both applications. I have a database that has the USER table with the PASSWORD encrypted and I've been already developed a Class Library with all the needs of Cryptography that has been used by the ASP.net application to authenticate users. The thing is, the desktop application has to authenticate the users too with the very same cryptography method, but Dephi cannot use dotNet assemblies (?). The client of the application ask to not use a web service and I'm trying to do this cryptography on the data base.The question is: Is there any way to invoke a dotNet Class Library through a SQL Server 2000 Stored Procedure?Consider that the Dephi developers had researched some ways to use dotNet assembly inside their application with no success. They had tried to develop their own cryptography method based on the algorithm that I had said them, but the encrypted string is different. Whenever the application try to match the strings, it doesn't work.Do you have some idea guys?Thanks in Advance! Ramon Silva
------------------------------------------------------------- Here's what our Immediate window Debugger is tellin' us about our configuration settings:
Now notice the stuff in bold...I have NO IDEA where this gosh-danged thing is reading, but it doesn't seem like it's the app.config file in our class library...
I have a requirement in which i have to create a custom .net class library for Ex:-I retrieve password(s) from a thrid party component. Below is what i am doing.
(1) Created a custom class library which reads a custom .xml file from a drive Ex:- "D:MyAppMYAppCofig.xml" and sets to my properties of my custom class library and inside it i created an instance of third party component's class and passed these values. Since i need to use this .net custom class library both in web and ssis/database side i am using this custom .xml file.
(2) After validating passed data (properties set in custom .net class library) the thrid party component instance object created in my custom .net class libraty returs a password to me own custom .net class libray.
(3) This password I use in my web app for connecting to database. This code is working fine.
(4) My question is how to execute a custom .net class library code through ssis and to use the my same custom .net class library and pass the password to my SSIS component / taks so that that code block also uses the returned password to connect and do any needed tasks? In other words how to use custom .net class library from SSIS.
My Environment is as follows:- SQL Server is : 2008 R2 VS.NET 2013
In another thread Jamie Thomson very informatively said "The components in SSIS are deliberately atomic (i.e. they do something very specific) so that its easy to put them together to build something greater than the sum of the parts". Which does make a lot of sense. However, I've been finding that I end up having to create exactly the same "pattern" of combined transform components again and again in order to solve the same problem but in different dataflows (or even within the same dataflow). Cut-and-paste-tastic! In order to obtain real re-use, it seems to me like SSIS is crying out for an easy way to create new components by using composition - i.e. the ability to take commonly-used combinations of existing components and create new "super" components (without having to write Custom Transform Components in C#/VB.Net and handle everything in code).
Does anyone know if this sort of functionality is likely to make it into SSIS in the forseeable future?
Can anyone tell me where I might find the Class and Sequence Diagrams for the SSIS framework (for Custom Components)?
I've just started trying to create some Custom Transform Components and I'm really struggling to get my head around the component lifecycle (i.e what methods are called when, with what arguments, and why) with just the BOL documentation to guide me.
I have a VB-class object running inside MS Transaction server. A function inside this class makes use of a temp table when a user does a web-query on my server which gets some data from SQL 6.5. Problem is, although the temptable is destroyed at the end of the function, my TempDB in SQL gets gradually fuller with each query that runs.
Why does this happen. I cannot release any of the tempdb space already in use, so eventually the tempdb gets completely full and SQL stops running.
I am running Windows Server 2003 R2 Enterprise Edition SP 2
I have created an integration package in VS 2005 which extracts data from Access 2000 and imports it into a table on SQL server 2005 running on this server.
The package runs ok in Visual Studio 2005, but when i schedule it as a step in 2005 SQL Agent to execute as a SQL Server Integration package using SQL Agent Service Account it comes with the following error - I did a bit of research which suggests this is due to SQL 64 bit and Windows 64b bit, however I am running 32 bit !! also the sql server agent is a domain admin user...can you gurus please help ?
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: 10:07:42 AM Error: 2007-10-31 10:09:13.85 Code: 0xC0202009 Source: Copy all Data to Reporting Prod Connection manager "Access Allocations.mdb" 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: 2007-10-31 10:09:13.85 Code: 0xC020801C Source: 5_Copy vw_Allocations 5_Access Allocations [1] Description: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "Access Allocations.mdb" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed. End Error Error: 2007-10-31 10:09:13.85 Code: 0xC0047017 Source: 5_Copy vw_Allocations DTS.Pipeline Description: component "5_Access Allocations" (1) failed validation and returned error code 0xC020801C. End Error Error: 2007-10-31 10:09:13.85 Code: 0xC004700C Source: 5_Copy vw_Allocations DTS.Pipeline Description: One or more component failed validation. End Error Error: 2007-10-31 10:09:13.85 Code: 0xC0024107 Source: 5_Copy vw_Allocations Description: There were errors during task validation. End Error DTExec: The package execution returned DTSER_FAILURE (1). Started: 10:07:42 AM Finished: 10:09:13 AM Elapsed: 91.422 second
Hi There, I am trying to create a DTS package that will import dbf tables. My problem is that the data was created back in the pre-dos 5 days, so to save room they took the dates and convert them to 2 characters. Now I would like to import these tables and conver the date back. I do have a Function that I can run in FoxPro to "Unpack" these dates.
CODE Function UnPackDate( cDate )
*!*PARAMETERS: f_datestr - Character (manditory). This should be a two **!* byte string created with PACKDATE(). *!* *!* RETURNS: A date from 1/1/1970 and 11/29/2126
Hi, I want to create a package to import some tables from database X from Server XYZ to database X of server ABC. (As my X database on server XYZ is gets updating everyday so i need to update it on X of server ABC using the package.) So i have created a package using the import export data transformationn services. It runs fine while creating. i.e importing data for the first time. But when i have saved that SSIS package on SQL or File system and scheduled it to run daily, but if fails everytime. I am not getting the error its giving. Because everytime when i go to view history of that package it just gives me messages like step1 started by user xyz and failed. Can you please help me to sort out this problem. If possible give me steps which will help me to create package to run above scenario. you can mail me the solution on abhijeets@nedbank.co.za
I had just installed SQL 2005 dev on my laptop and got an error message when I tried to create a package using the BI IDE. I received the same error using VS2005 IDE. But the project was created regardless without any packages. When I tried to create a new package in the project, I received the same error again, but with an option to view the error details.
Following is the text of the error details:
TITLE: Microsoft Visual Studio ------------------------------
I am using the SQL Package Installation Wizard to deploy my SSIS packages on to a 64-bit SQL Server and I am getting this error, Library not registered. I am also getting the same error when I tried to import a SSIS package from a 32-bit SQL Server. I was able to save my SSIS packages to the 64-bit SQL Server one by one from Visual Studio. My server is run Windows 2003 Enterprise x64 with SP1, and SQL 2005 Enterprise x64 with SP1 and hotfixes. 64-bit .Net Framework is also registered on the machine.
This is the error from the installation log file:
Exception details: Microsoft.SqlServer.Dts.Runtime.DtsTaskException: Library not registered. ---> System.Runtime.InteropServices.COMException (0x8002801D): Library not registered.
at Microsoft.SqlServer.Dts.Runtime.Wrapper.ApplicationClass.SaveToSQLServer(IDTSPackage90 Package, IDTSEvents90 pEvents, String ServerName, String ServerUserName, String ServerPassword) at Microsoft.SqlServer.Dts.Runtime.Application.SaveToSqlServer(Package package, IDTSEvents events, String serverName, String serverUserName, String serverPassword) --- End of inner exception stack trace --- at Microsoft.SqlServer.Dts.Runtime.Application.SaveToSqlServer(Package package, IDTSEvents events, String serverName, String serverUserName, String serverPassword) at Microsoft.SqlServer.Dts.Deployment.DtsInstaller.SavePackageToSqlServer(WizardInputs wizardInputs, String packagePassword, Boolean bUseSeverEncryption, String serverName, String userName, String password, String packageFilePath, List`1 configFileNames) at Microsoft.SqlServer.Dts.Deployment.DtsInstaller.InstallPackagesToSqlServer(WizardInputs wizardInputs)
i need to execute a ssis(sql 2005 integration service) on a document document library . can you people help me out how i can do it
i want to make a work flow which initiate when new document upload in a moss document library and this work flow pass the document to a ssis package and initiate that ssis package
note: the database and moss servers are on different machine
Attempting to schedule and execute a package. The server is a 64bit clustered sql 2005 server.
The package was developed on my local install of sql 2005 client tools. I can run the package within BIDS, I can export and run the package from MSDB, but I cannot get it to execute without failure when scheduled.
I suspect it is some weirdness caused by the difference between 32 bit and 64 bit type program, but do not know what to do to figure it out.
Job history output below:
Date 14/09/2007 1:07:30 PM Log Job History (SISS)
Step ID 1 Server servername Job Name SSIS test job Step Name Import NE Outpat Duration 00:00:02 Sql Severity 0 Sql Message ID 0 Operator Emailed Operator Net sent Operator Paged Retries Attempted 0
Message Executed as user: HAHSillsqlserver. ...9.00.3042.00 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 1:07:30 PM Progress: 2007-09-14 13:07:31.54 Source: Clinics Validating: 0% complete End Progress Progress: 2007-09-14 13:07:31.54 Source: Clinics Validating: 33% complete End Progress Progress: 2007-09-14 13:07:31.75 Source: Clinics Validating: 66% complete End Progress Error: 2007-09-14 13:07:31.89 Code: 0xC0202009 Source: ImportNewEnglandOutpatientData Connection manager "Clinics" 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: 2007-09-14 13:07:31.89 Code: 0xC020801C Source: Clinics Clinics Access Database [15] Description: SSIS Error Code DTS_E_CANNOTACQ... The package execution fa... The step failed.
I have one custom dataflow component in assembly A with version 1.1.0.0 used in many packages. The component is now in assembly A with version 1.2.0.0 but not changed. There is aniway to have those packaged configured in order to automaticaly be upgrated to use the new version of the component?
I tried (in this order): - set the property "UpdateObjects" to true on package (while version 1.1.0.0 was available in GAC) and saved package. - unistalled the version 1.1.0.0 from GAC. - tried to reopen package with "Reload and Upgrade" option. NO SUCCESS
I know that can be an brute way to do it, meaning replace as text in xml ... but i try to find a solution not this stupid "workaround"
I´m wondering how to make a connection to a file in differents machines, FTP, excel file, HTTP, WebService instead of OLDDB, where can I find a reference for the constants that must be used in each case.
In several threads there has been discussion regarding adding connection managers to a package's data flow, etc. My challenge is that I have a large solution that contains many packages, and I need to change the connection manager linked to the data flow in all of the packages. When the solution was initially designed, data sources were used, and it has become a tedious maintenance issue to keep those in sync. We want to use a standard OLEDB connection manager, but adding a connection manager to each package and editing the corresponding data flow tasks in each package to use that new connection manager is a daunting task. I've coded a .Net module to access the packages, remove the old connection manager (data source) and add the new OLEDB data source. However, as I traverse the objects in the package hierarchy, when I come to the data flow object, the innerobject is not a dts object, but rather a _com object.. I can't seem to find any documentation/examples as to how to iterate the tasks within a data flow and change the connection manager. If you have any information, that would be quite helpful. If you reply with a code sample, if you would be so kind as to relate it to one of the sample packages provided with SSIS so I can run it, that would be great.
I have Data Flow task that contains 50 components.
My computer configuration: 1 GB RAM Microsoft Windows Server 2003
Periodicaly when i try to save package after making some changes Out of memory ... exceptions message box appears , and soon after this Not fatal error occurs ... message box shows . If i close solution and open it again all my 50 components disappears --instead I see clear list, and all my work losen.
Such "Not fatal errors" making hell out of job -- every time I need to change package i must add package to archive!!!
Hai Guys, I have a doubt Regarding SqlDataReader i can able to create object to Sqlconnection,Sqlcomand etc... but i am unable to create object for SqlDataReader ? Logically i understand that SqldataReader a way of reading a forward-only stream of rows from a SQL Server database. This class cannot be inherited. sqlDatareader belongs to which class is it sealed or static class? can we create own class like SqldataReader ....... Reply Me ...... if any one know the answer..............
Everything I've read says that custom data flow components are built by inheriting from the Microsoft.SqlServer.Dts.Pipeline.PipelineComponent class.
But the stock components such as the Derived Column data flow transformation must each be implemented by their own class. So how do I base my custom components on those classes? The documentation for the PipelineComponent class doesn't list any such subclasses.
We're experiencing a problem where intermittently our SSIS packages will hang. There are no log errors or events in the event viewer. It will happen whether the package is executed from the SQL Job Agent or run from BIDs. When running from BIDs it appears to hang inside one of the data flows (several parallel pipes with sorts, merge joins etc...). It appears to hang in multiple pipes within the data flow component. The problem is reproducable, we just kill it and re-run, and it appears to hang in the same places.
Now here's the odd thing: as we simply open and close some of the components in the pipe line after the place it hangs, a subsequent run will go further in the pipeline before hanging. If we open and close all the components after the point it initially hung, the data flow will run fine, from there on out. When I say "open and close" I mean no changes are made, we simply double-click the component, like a merge join, then click 'close.'
To me this does not seem like a memory problem but likely something is wrong with the metadata, where opening a component and closing it somehow alters the metadata to "right it".
This seems to occur intermittently after we make modifications to the package. It's like if you make any mod, even unrelated to the data flow, you then have to go through and open and close every component in your package to ensure it will work. Again, no errors or warnings are fired.
When the CLR function executes "CREATE ASSEMBLY" the following error is thrown.
"Could not impersonate the client during assembly file operation."
The CLR function is invoked from Service Broker internal activation stored procedure.
"SELECT user_name()" returns dbo just before CREATE ASSEMBLY execution.
SqlContext.WindowsIdentity.Name is "NT AUTHORITYSYSTEM" as the Data Engine runs with the LocalSystem account.
How do I create a the necessary security context for "CREATE ASSEMBLY" to succeed ?
Service Broker Queue activation with EXECUTE AS = "SELF", "OWNER", domain account or dbo, all result in the above error. The Service Broker assembly having the internal activation stored procedure is registered "unsafe".
I try to create a Sproc which will use a cursor to retrieve a few rows from a table. But the cursor part has given me problem. Here it is:
StudentInfo StudentID StudentName DeptID 101 John 10 102 Alex 10 103 Beth 20 ClassInfo ClassID DeptID 901 10 902 10 225 20 I want to create a Sproc which will retreive the student's classes in DeptID 10
Following is the Sproc and cursor:
use master go Create PROCEDURE [dbo].[getEnclishClasses] @StudentID int AS Declare @printInsertStatement nvarchar(100) ECLARE NewRowID int
Declare classCursor CURSOR FOR SELECT ClassID, DeptID FROM [myTest].dbo.ClassInfo WHERE DeptID=(SELECT DeptID FROM [myTest].dbo.StudentInfo WHERE StudentID=@StudentID)
DECLARE @ClassID INT DECLARE @DeptID INT
OPEN classCursor FETCH NEXT FROM classCURSOR INTO @ClassID, @DeptID WHILE (@@FETCH_STATUs=0) BEGIN PRINT 'SET @newID = Scope_Identity()' SET @printInsertStatement= (Select 'INSERT INTO [myTest].dbo.ClassInfo (ClassID, DeptID) Values(' +CONVERT(NVARCHAR (10), @ClassID) + ',' +CONVERT(NVARCHAR (2), @DeptID)+')' FROM [myTest].dbo.StudentInfo WHERE DeptID=(SELECT DeptID FROM [myTest].dbo.StudentInfo WHERE StudentID=@StudentID))
PRINT @printInsertStatement END CLOSE classCursor DEALLOCATE classCursor EXEC getEnclishClasses 101
Here is what I try to get (text with actual data from the table): SET @newRowID = Scope_Identity() INSERT INTO [myTest].dbo.ClassInfo VALUES(901, 10) SET @newRowID = Scope_Identity() INSERT INTO [myTest].dbo.ClassInfo VALUES(902, 10)
Here is what I had got (returning multiple lines, more than number of records I have): Msg 512, Level 16, State 1, Procedure getEnclishClasses, Line 19 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Thanks in advance for your help! Or is it a better way (not using a cursor). Each table has over 5,000 records.
I was wondering if it is possible to execute a package inside a script. I know there are other ways to do this like using the "Execute Package Task" or using DTExec inside a .bat file but those options won't fulfill what I am trying to do. It looks as though this function should be able to do this
Microsoft.SqlServer.Dts.Runtime.Package.Execute()
but I can't seem to get this to work. Has anyone used this before??
I have other work-arounds if this is impossible but thought I would ask.
I am having problem with 'TOP @pageSize'. It doesn't work, but if I replace it by 'TOP 5' or 'TOP 6' etc., then the stored procedure runs without errors. Can someone please tell me how I could use @pageSize here so that it dynamically determines the 'n' of 'TOP n' ?
ALTER PROCEDURE dbo.spGetNextPageRecords
( @pageSize int, @previousMaxId int
)
AS /* SET NOCOUNT ON */ SELECT Top @pageSize ProductId, ProductName FROM Products WHERE (ProductID > @previousMaxId) order by ProductId RETURN
it seems like i am able to create it. But when i try to access that temporary table, i get an error "Invalid object". this is happening only when i try to create local temporary table. Global temporary table works fine inside the dynamic SQL.