Quantcast
Channel: SQL Server Integration Services forum
Viewing all articles
Browse latest Browse all 24688

How to programatically add an unpivot component and how to set the destination column and pivot key value for each input column of the unpivot component?

$
0
0
Hi,

I've programmatically created a package with data conversion component. My source is excel file. I'm trying to add a unpivot transformation component after the data conversion component. I'm not getting the right properties of the unpivot tranformation component to set its desination column and pivot key value for desired input columns (output columns from the data conversion component, columns which i want to transpose). Below is my code. Urgent requirement please.....


 

IDTSOutput90 output = conversionDataFlowComponent.OutputCollection[0];

 

IDTSVirtualInput90 virtualInput = conversionDataFlowComponent.InputCollection[0].GetVirtualInput();

 

int inputId = conversionDataFlowComponent.InputCollection[0].ID;

 

//Get SchemaTable

 

DataTable dtDBSchema = GetDBSchemaColumns();

 

foreach (IDTSVirtualInputColumn90 vcolumn in virtualInput.VirtualInputColumnCollection)

{

 

 

string DataType = "Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.";

 

string finaldatatype = "";

 

DataTable dtTempDBfields = dtDBfields.Clone();

 

DataTable dtTempDBSchema = dtDBSchema.Clone();

 

string formattedColName = getformmatedSourceColumn(dtMappedExcelToDB, vcolumn.Name);

 

string whereclauseDBF = "DBFields = '" + formattedColName + "'";

 

string wherecluaseSchemaField = "ColumnName = '" + formattedColName + "'";

 

string bstrName = "T" + formattedColName; //vColumn.Name.ToString() + "AsString";

 

 

foreach (DataRow DRC in dtDBfields.Select(whereclauseDBF))

{

dtTempDBfields.ImportRow(DRC);

}

 

//Get Length of Each DB Schema Column

 

foreach (DataRow DRC in dtDBSchema.Select(wherecluaseSchemaField))

{

dtTempDBSchema.ImportRow(DRC);

}

 

int sourceColumnLineageId = virtualInput.VirtualInputColumnCollection[vcolumn.Name.ToString()].LineageID;

Microsoft.SqlServer.Dts.Runtime.Wrapper.

DataType dtype = new Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType();

dtype = getSSISDataTypes(dtTempDBfields.Rows[0][1].ToString(),

int.Parse(dtTempDBSchema.Rows[0]["ColumnSize"].ToString()), int.Parse(dtTempDBSchema.Rows[0]["NumericPrecision"].ToString()), int.Parse(dtTempDBSchema.Rows[0]["NumericScale"].ToString()));

 

 

IDTSInputColumn90 inputColumn = conversionInstance.SetUsageType(inputId, virtualInput, vcolumn.LineageID, DTSUsageType.UT_READONLY);

 

IDTSOutputColumn90 outputColumn = conversionInstance.InsertOutputColumnAt(output.ID, 0, bstrName, string.Empty);

conversionInstance.SetOutputColumnDataTypeProperties(output.ID, outputColumn.ID, dtype,

int.Parse(dtSetDataTypeProperties.Rows[0]["length"].ToString()), int.Parse(dtSetDataTypeProperties.Rows[0]["precision"].ToString()), int.Parse(dtSetDataTypeProperties.Rows[0]["scale"].ToString()), int.Parse(dtSetDataTypeProperties.Rows[0]["codepage"].ToString()));

outputColumn.CustomPropertyCollection[0].Value = inputColumn.LineageID;

 

dtSetDataTypeProperties.Clear();

}

conversionInstance.ReleaseConnections();

 

///added Unpivot

 

///

 

IDTSInput90 unpinput;

 

IDTSVirtualInput90 vunpivInput;

 

 

//get input from conversion output collection

unpinput = UnpivotComponent.InputCollection[0];

 

vunpivInput = unpinput.GetVirtualInput();

 

foreach (IDTSVirtualInputColumn90 vColumn in

vunpivInput.VirtualInputColumnCollection)

{

 // I want to transpose each virtual column (column name containing TSales) from Data conversion component

 

if(vColumn.Name.ToString ().Contains ("TSales"))

{
//Here how do i set the desination column and pivot key value for desired input virstual columns
}
}


Viewing all articles
Browse latest Browse all 24688

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>