I instantiated a new script component into an existing Data Flow in my SSIS project.
In the Script Transformation Editor, under the Connection Managers section, I associated the name dbConnManager to an already existing Connection Manager in the project.
My Connection Manager is of the type oOLEDB.
I then opened up the script designer and added the following lines of code where it said "Add your code here"
When I test run the project I get the following error and the new script component is red:
Unable to cast COM object of type 'System.__ComObject' to class type 'System.Data.OleDb.OleDbConnection'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.
I know the database connection works since I am using it in a component that executes before this new script component.
I'm on writing a custom data flow component (transformation). For this I need access to an external datasource. As best practice, it seems that you should use a connectionmanager in the package.
But I don't really know how to access them.
I've overwritten the AquireConnections() to lookup in the RuntimeConnectionCollection for the connection managers. But It seems it doesnt get called. If I call it my own, for example in validate (just for debugging purposes) the collection is empty, although there are two connectionmanagers in the package.
What am I doing wrong or has someone a code snippet for me.
I am writing a custom dataflow transformation component and I need to get the name of the preceeding component.
I have been trying to find a way to get a reference to the Package object, MainPipe object or IDTSPath90 object (connecting to the IDTSInput90 of my component) from my component because I think from there I can get to the information I want.
I am missing something simple. I have added a new Transformation Script, put in my code to read the input rows, defined my outputs. I have tried to change the SynchonousInputId to 0, but I only get the option of None or input "Input 0" (91). What have I missed?
i am developing one custom transfer component, where i am building one custom object and want the same to be transfered from ComponentUI to component.I explored in this issue and came to know that we can make use of SaveToXML and LoadXML methods of IDTSPersist90 interface. The problem is i could not able to make use of this interface.If any body faced same issue and got the solution, let me know the same.
I've been trying to figure this out on my own for pretty much all of today, and part of last week. I've downloaded samples, searched this forum, blogs, etc. So I figured I would post, since it's the end of the day, and I'm not much further along.
I'm working on a custom transformation component, whose main function is to use SQL encryption/decryption to encrypt/decrypt data from the input columns, into the output columns. The component needs two strings, a key name and a certificate name, as well as the connection manager it should use to connect to SQL which will do the encryption/decryption.
Here's where I'm stuck:
1) How can I provide the key/certificate names via properties? What I'm expecting/looking for is a way to add these two properties at the component-level, which would show up under the "Custom Properties" section of the properties pane (currently, this only has one property, "UserComponentTypeName"). These key/certificate values will be used for all input columns.
2) How do I access the connection managers from within the component? What is the best way to go about using a connection manager from within my component to connect to SQL and perform the encryption/decryption? In a custom task, this was fairly simple, but it seems that same concept won't work on a transformation component.
3) Is there a better way to go about accomplishing this (column encryption via SQL from within SSIS)? Am I going about this all wrong?
As I said, I've searched for direction, but there seems to be next to nothing in the regards of a good reference for creating custom transformation components. I've looked at two MS samples, but can't seem to make any sense out of them.
Is there any tutorial to learn how custom transformation component works? maybe a blog, pdf or something... Specifically, i need to learn how to generate an output column composed from 3 input columns. The problem is i dont know how to set the column value... anyone have some sample code?
Does anyone have any examples of programmatically creating a Transformation Script Component (or Source/Destination) in the dataflow? I have been able to create other Transforms for the dataflow like Derived Column, Sort, etc. but for some reason the Script Component doesn't seem to work the same way.
I have done it as below trying many ways to get the componentClassId including the AssemblyQualifiedname & the GUID as well. No matter, what I do, when it hits the ProvideComponentProperties, it get Exception from HRESULT: 0xC0048021
Hi, I have 56 fields coming into the input of an script component, The need for script component was to just to check if one of those 56 columns has a valid date or not, If valid it will parse and put in an output date column, if not, it will put in NULL.
The 55 fields should be passed on. I dont really wanna write code and define output columns. How do I do this ?
I need to know how to use my private function - created as a scalar-valued-function in SQL Server 2005 - in script component (here a transformation is used) in a data flow task to transform a two-digit-month into a tree-sign-month:
I'm having trouble with a Script Component in a data flow task. I have code that does a SqlCommand.ExecuteReader() call that throws an 'Object reference not set to an instance of an object' error. Thing is, the SqlCommand.ExecuteReader() call is already inside a Try..Catch block. Essentially I have two questions regarding this error:
a) Why doesn't my Catch block catch the exception? b) I've made sure that my SqlCommand object and the SqlConnection property that it uses are properly instantiated, and the query is correct. Any ideas on why it is throwing that exception?
Hi all, I have what will probably turn out to be a very simple issue but has eluded me for a few hours. I have a Script Transformation that I am using to create surrogate keys I have to seed the key from the db and the best solution I have come up with is to use the Script Transformation. Here is what I have
Imports System.Data.SqlClient
Public Class ScriptMain Inherits UserComponent Dim max As Integer Dim connMgr As IDTSConnectionManager90 Dim sqlConn As SqlConnection Dim sqlReader As SqlDataReader
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) max = max + 1 Row.BonusId = max End Sub
Public Sub New() max = 0 connMgr = Me.Connections.Connection sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection) Dim cmd As New System.Data.SqlClient.SqlCommand("select max(bonusid)as max from pnt_bonus", sqlConn) sqlReader = cmd.ExecuteReader
sqlReader.Read() max = sqlReader.GetInt32(0) sqlReader.Close() connMgr.ReleaseConnection(sqlConn)
End Sub End Class
But I keep getting this error and can not figure out what I did wrong
Error 1 Validation error. Pnt_BonusGrant: Script Component [2094]: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object. at ScriptComponent_72b9559a12514bab836d9b5da9922bce.Connections.get_Connection() in dts://Scripts/ScriptComponent_72b9559a12514bab836d9b5da9922bce/ComponentWrapper:line 50 at ScriptComponent_72b9559a12514bab836d9b5da9922bce.ScriptMain..ctor() in dts://Scripts/ScriptComponent_72b9559a12514bab836d9b5da9922bce/ScriptMain:line 24 --- End of inner exception stack trace --- at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) at System.Activator.CreateInstance(Type type, Boolean nonPublic) at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.CreateUserComponent() Package.dtsx 0 0
I have a package that has a data lfow task. this task imports data from a db2 database (using the IBM Ole DB provider fro db2) and adds it to sql server database table. This package was created on the server. then though version control (using TFS source control) I check out the package on my local machine. and when I open the package I get the foll 3 errors.
Error 1 Validation error. Import Account Num from BMGP_BDR: DTS.Pipeline: The component metadata for "component "DataReader Source" (1113)" could not be upgraded to the newer version of the component. The PerformUpgrade method failed.
Error 2 Error loading BMAG Download Xref Tables - bmag.dtsx: Microsoft.SqlServer.Dts.Pipeline.ComponentVersionMismatchException: The version of component "DataReader Source" (1113) is not compatible with this version of the DataFlow. [[The version or pipeline version or both for the specified component is higher than the current version. This package was probably created on a new version of DTS or the component than is installed on the current PC.]] at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostCheckAndPerformUpgrade(IDTSManagedComponentWrapper90 wrapper, Int32 lPipelineVersion)
Error 3 Error loading BMAG Download Xref Tables - bmag.dtsx: The component metadata for "component "DataReader Source" (1113)" could not be upgraded to the newer version of the component. The PerformUpgrade method failed.
I have a package which reads an Access file from a folder. My connection manager to this file is .NET providers for OledbMicrosoft Jet 4.0 OLE DB Provider.
Package works from my computer. But when I execute it on the server as a SQL Agent job, I get
The component metadata for "component "DataReader Source" (1) could not be upgraded to the newer version of the component. The PerformUpgrade method failed.
I copied the mdb file to a folder on the server which my packages have no problem reading data from.
My packages run under the same domain account as defined in proxies.
Is it possible to parameter the connection of a Lookup Transformation task - specifically the table/view name? I would like to be able to dynamically set the table that the Lookup Transformation is connecting to at runtime.I've looked into the "Use results of an SQL query" on the connection screen (which correlates to the "SqlCommand" property), but I'm unable to pass in a parameter this way.I've also looked into the SqlCommandParam, but that doesn't allow me to use a parameter in the "FROM" clause of the sql syntax.
Greetings, and Happy Friday. I want to check myself in regards to the proper use of connections in a data flow script component being used as a transformation. I want to ensure that the solution is ideal from a performance standpoint, but more importantly that there won't be any resource leaks from connections that are not being closed or objects that are not being disposed properly.
This transformation script component is writing to a table based on the rows that pass through Input0_ProcessInputRow(). What I'm doing so far is, in the script component script, I've declared a class-level variable of type System.Data.SqlClient.SqlConnection. In the PreExecute() event handler I am initializing this connection with the following code (which comes after the call to MyBase.PreExecute()):
Dim connMgr As IDTSConnectionManager90 connMgr = Me.Connections.JobDB adoConn = CType(connMgr.AcquireConnection(Nothing), SqlClient.SqlConnection) If adoConn.State <> ConnectionState.Open Then adoConn.Open() End If connMgr = Nothing The adoConn variable referred to there is the class-level variable. So, my first questions:
Is this the best way to initialize the connection? And is that code checking adoConn.State necessary? Can I pretty much assume that the connection manager is going to give me an open connection?
Then in the PostExecute() event handler I have this code (again, after the MyBase call):
If Not (adoConn Is Nothing) Then If adoConn.State = ConnectionState.Open Then adoConn.Close() End If adoConn.Dispose() adoConn = Nothing End If
Next questions:
Is this adoConn variable actually holding a reference to an object whose primary owner is in the connection manager? Is it necessary to close my SqlConnection this way, or is that going to actually close the connection manager's connection?
I'm also wondering whether I need to have this same code in the script component's Finalize() handler also...if there's an error I don't want the resource to leak. Or will PostExecute() fire even if there's an error in Input0_ProcessInputRow()?
Hi I am using OLEDB Connection in script component. I get a login failure when I run the package. I use SQL Server authentication. Do you have to use windows authentication in script component? Thanks
I have a script component which loads a file which is in a custom format. The script component is inside a For Each Loop Container and it uses a flat file connection manager. The loop sets the connection string for the connection manager.
The problem I'm having is that the connection string needs to be set to something every time that I start the package but I don't know ahead of time what file there will be, so I get a System.IO.FileNotFoundException error on the script component. If I manually set the variable for the connection string and point it to a file that exists, then the package runs fine but at the end of the package the connection string is set to the last file loaded and this file will no longer exist the next time the package runs.
I am writing a Custom Destination component with a custom UI. The UI contains a combo box which contains the connection names of type €śFLATFILE€?. I also have provided a button which would create a new connection of type €śFLATFILE€? by making a call to CreateConnection method of IDtsConnectionService. The combo box gets properly updated showing the connections of type €śFLATFILE€? but on clicking on the new Connection button the application hangs up. Am I missing something or is there some other way to do it?
The function are the events handlers which are called by the UI.
if (connectionService != null) { ArrayList temp_Connections = connectionService.GetConnectionsOfType("FLATFILE");
args.AvailableColumns = new AvailableColumnElement[temp_Connections.Count]; for (int i = 0; i < temp_Connections.Count; i++) { ConnectionManager runtimeConnection = (ConnectionManager)temp_Connections; args.AvailableColumns.AvailableColumn = new DataFlowElement(runtimeConnection.Name, runtimeConnection); }
args.AvailableColumns = new AvailableColumnElement[temp_Connections.Count]; for (int i = 0; i < temp_Connections.Count; i++) { ConnectionManager runtimeConnection = (ConnectionManager)temp_Connections; args.AvailableColumns.AvailableColumn = new DataFlowElement(runtimeConnection.Name, runtimeConnection); }
I am running SQL 2005 9.0.1399 and VS 2005 8.0.50727.42 (RTM.50727.4200) on Windows Server 2003 Enterprise Edition SP1. Any suggestions would be welcome.
The code sample is an extension to the RemoveDuplicates sample (Dec 2005) which comes along with the SQL Server.
Hi All, I've written a script component that essentially uses a connection manager to connect to a database and executes a stored proc to return a retail price for a product sold in a store. This works fine with small volumes of data. (50 or so executes) When I use larger volumes of data (4500 executes, eventually will be 2.5 million) I get connection pooling errors as follows:-
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
This I can fix on the 4500 data volumes by setting the connection pool to 10000.
My question is... is this the correct way to fix the error, or is there an underlying problem that needs to be sorted? My script code is as follows.
Public Overrides Sub SalesData_ProcessInputRow(ByVal Row As SalesDataBuffer)
Dim InSightConnectionManager As IDTSConnectionManager90 = Me.Connections.InSight
Dim InSightConnection As SqlConnection = CType(InSightConnectionManager.AcquireConnection(Nothing), SqlConnection)
Hi all. Sorry about bothering you again but I have no choice, I'm afraid. This time I have to add a connection manager at runtime. I have a script that examines rows in a huuuuuuuuuuuuge file and it turns out that I will have to redirect different rows into 95 different text files. I would like to avoid the pain of creating the files and connection managers manually. I have a source script component that runs asynchronously (the only way basically it can run as a source) and I wonder whether this time, when I change the connction string on the manager at runtime inside the script, it would run properly. Can anybode tell me, please?
Attempting to create a data flow task to copy data from AS/400 (DB2) to SQL2005, using an existing System DSN ODBC connection defined on the SQL2005 host.
Problem:
When adding the DataReader Source component to the package, I cannot assign the Connection Manager. Designer issues the error message:
"The runtime connection manager with the ID "" cannot be found. Verify that the connection manager collection has a connection manager with that ID."
Editing the DataReaderSrc component shows only one row under the Connection Managers tab:
The datareadersrc component editor displays the warning message: "Not all connection managers have been set. Set all connection managers.". Clicking the Refresh button causes the error message to be displayed "The runtime connection manager with the ID "" cannot be found. Verify that the connection manager collection has a connection manager with that ID."
I am prevented from assigning my Connection Manager object the DataReaderSrc.
The package already contains one Connect Manager object:
Provider: .Net Providers/Odbc Data Provider System DSN
The standard flat file connection component does not handle flat files with different column counts on different rows. Since that's the type of file I have to read, I like to create a modified version of the flat file connection manager that can do this. I have found some info in how to create a connection manager. But I can't find anything that tels me how to build one that would be recognized by the flat file source dataflow component.
So how do you build an connection manager that can used by the standard flat file source component? Anyone ever did this or knows were to get the docs?
I know my problem is also solvable by reading the row into a single column and then using a script component to split them but that is not the solution I want.
I have written a script source component and attached a flat file connection. The connection string of which is defined by an expression.
However when I get the connectionstring from the connection in the script it has the default filename value of flat file not the value of the expression. This is proved by passing in the filename variable, and comparing the 2.
The flat file has an expression on the ConnectionString of @[User::filename]
Within a data flow I have a script component that I want to perform some data calls from. I want to execute SQL commands to connections already defined in the package's connection manager.
Is there a way to set my script's connection variable to the connection manager connection? Or, can I use the connection manager connections directly from within the script?
If you have two synchronous transformation components and the input of the second is connected to the output of the first, does the first transformation process (loop through) all rows in the buffer before outputting these rows to the second transformation? Or does the first transformation output each individual row to the second transormation as soon as it has finished processing it?
I need you help badly. Iam a student and iam working on "Creating a Mobile Application with SQL Server Compact Edition" http://msdn2.microsoft.com/en-us/library/ms171908.aspx . This tutorial works fine until
Create the publication snapshot
In SQL Server Management Studio, in Object Explorer, expand the (local) computer node.
Expand the Local Publications folder, select the publication name, right-click SQLMobile, and then click View Snapshot Agent Status.
In the View Snapshot Agent Status dialog box, click Start.
Make sure that the snapshot job has succeeded before you continue.
When I try to create a snapshot iam getting the following error "An unspecified error had occurred in the native SQL Server connection component." . I have no clue what to do next please help me out.
ConnectionManager manager = Microsoft.SqlServer.Dts.Runtime.DtsConvert.GetWrapper(base.Connections.Connection); IDTSConnectionManagerCache100 cache = manager.InnerObject as IDTSConnectionManagerCache100; if (cache != null) { Â System.Windows.Forms.MessageBox.Show("Cache is found."); } and use IDTSConnectionManagerCacheColumn100 id = connMgr.Columns["Id"]; get the column info.
but how do i get the cache connection content ?I want to look in the content in a script component code.Â
I am using a Foreach loop container to go thru all the files downloaded from the ftp site and I am assigning the file name of each file to a variable at the foreach loop level called filename. In the dataflow task inside the foreach loop container, I have a source script component that uses a flat file connection. The connection string of the flat file connection is set to the filename variable declared at the foreach loop level. However the script component has a error System.ArgumentException: Empty pathname is not legal.
Please let me know how to correct this? The connectionString property of the flat file connection is set to the complete filename including the path. Does a script component need to have a flat file name specified in the flat file connection that it is using? I need to have a script source component as the flat file I am reading from is not in any of the standard formats.
The flat file connection manager's connection string property is blanked out the moment I specify an Expression for the connection string. Is this a defect or is it expected behavior.