Hi ,
I Have SSIs which doing export from SQL DB to Excel , i am using Data Conversion for cast data, everything seems work, but when i case data from , my Destination Data not mapping becuase , column name looks chnage by using prefix.
how i can fix code below
very helpful this code.
Microsoft.SqlServer.Dts.Runtime.Application SIFISO_app = new Microsoft.SqlServer.Dts.Runtime.Application();
//Adding Connection Manger
Package package = new Package();
ConnectionManager ConMgr = package.Connections.Add("OLEDB");
ConMgr.ConnectionString = ""
ConMgr.Name = "SourceConnectionOLEDB";
ConMgr.Description = "OLE DB connection to the AdventureWorks2008R2 database.";
Executable e1 = package.Executables.Add("STOCK:PipelineTask");
TaskHost thMainPipe = e1 as TaskHost;
thMainPipe.Name = "Data Flow Task 1";
//thMainPipe.Properties["Connection"].SetValue(thMainPipe, "SourceConnectionOLEDB");
MainPipe dataFlowTask = thMainPipe.InnerObject as MainPipe;
// string Conn = "Data Source=S4UAGP-PC\\ASHOKINSTANCE;Initial Catalog=MMBD;Integrated Security=True";
// Create the source component.
///Adding Source
///
IDTSComponentMetaData100 srcComponent = dataFlowTask.ComponentMetaDataCollection.New();
srcComponent.ComponentClassID = "DTSAdapter.OleDbSource";
CManagedComponentWrapper srcDesignTime = srcComponent.Instantiate();
srcComponent.Name = "Source - MMBD_LN_MSTR1";
//srcComponent.Description = "OLE DB Source";
IDTSDesigntimeComponent100 srcDesignTimeComponent = srcComponent.Instantiate();
srcDesignTimeComponent.ProvideComponentProperties();
// Configuring it to read from the given table
//srcDesignTimeComponent.SetComponentProperty("AccessMode", 2);
//srcDesignTimeComponent.SetComponentProperty("SqlCommand", "SELECT * FROM [MMBD_LN_MSTR]");
srcDesignTimeComponent.SetComponentProperty("AccessMode", 0);
srcDesignTimeComponent.SetComponentProperty("OpenRowset", "[dbo].[MMBD_LN_MSTR1]");
// Setting the connection manager
srcComponent.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.GetExtendedInterface(ConMgr);
srcComponent.RuntimeConnectionCollection[0].ConnectionManagerID = ConMgr.ID;
srcDesignTime.AcquireConnections(null);
srcDesignTime.ReinitializeMetaData();
////Adding Data Conversion
IDTSComponentMetaData100 dataConvertComponent = dataFlowTask.ComponentMetaDataCollection.New();
dataConvertComponent.ComponentClassID = "DTSTransform.DataConvert";
dataConvertComponent.Name = "Data Convert";
dataConvertComponent.Description = "Data Conversion Component";
CManagedComponentWrapper conversionInstance = dataConvertComponent.Instantiate();
conversionInstance.ProvideComponentProperties();
conversionInstance.AcquireConnections(null);
conversionInstance.ReinitializeMetaData();
// Connect the source and the transform
dataFlowTask.PathCollection.New().AttachPathAndPropagateNotifications(srcComponent.OutputCollection[0], dataConvertComponent.InputCollection[0]);
IDTSOutput100 output = dataConvertComponent.OutputCollection[0];
IDTSVirtualInput100 virtualInput = dataConvertComponent.InputCollection[0].GetVirtualInput();
int inputId = dataConvertComponent.InputCollection[0].ID;
foreach (IDTSVirtualInputColumn100 vColumn in virtualInput.VirtualInputColumnCollection)
{
string test = vColumn.DataType.ToString();
//if (vColumn.Name == "REC_CRE_DT") MessageBox.Show("ff");
Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType dtype = new Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType();
dtype = getSSISDataTypes(vColumn.DataType);
if (dtype != Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_STR)
{
IDTSInputColumn100 inputColumn = conversionInstance.SetUsageType(inputId, virtualInput, vColumn.LineageID, DTSUsageType.UT_READONLY);
IDTSOutputColumn100 outputColumn = conversionInstance.InsertOutputColumnAt(output.ID, 0, vColumn.Name, string.Empty);
conversionInstance.SetOutputColumnDataTypeProperties(output.ID, outputColumn.ID, dtype, 1000, 0, 0, 0);
outputColumn.CustomPropertyCollection[0].Value = inputColumn.LineageID;
}
else
{
IDTSInputColumn100 inputcolumn = conversionInstance.SetUsageType(inputId, virtualInput, vColumn.LineageID, DTSUsageType.UT_READONLY);
IDTSOutputColumn100 outputColumn = conversionInstance.InsertOutputColumnAt(output.ID, 0, vColumn.Name, string.Empty);
conversionInstance.SetOutputColumnDataTypeProperties(output.ID, outputColumn.ID, dtype, 20, 0, 0, 1252);
outputColumn.CustomPropertyCollection[0].Value = inputcolumn.LineageID;
}
}
conversionInstance.ReleaseConnections();
////Adding Destination
ConnectionManager SconMgr = package.Connections.Add("EXCEL");
SconMgr.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\tesing.xls;Extended Properties=""Excel 8.0;HDR=Yes""";
SconMgr.Name = "ExcelConnection";
IDTSComponentMetaData100 destComponent = dataFlowTask.ComponentMetaDataCollection.New();
destComponent.ComponentClassID = "DTSAdapter.ExcelDestination";
CManagedComponentWrapper srcDesignTime1 = destComponent.Instantiate();
destComponent.Name = "Source - MMBD_LN_MSTR1";
//destComponent.Description = "OLE DB Source";
IDTSDesigntimeComponent100 srcDesignTimeComponentdest = destComponent.Instantiate();
srcDesignTimeComponentdest.ProvideComponentProperties();
srcDesignTimeComponentdest.SetComponentProperty("AccessMode", 0);
srcDesignTimeComponentdest.SetComponentProperty("OpenRowset", "Excel Destination");
destComponent.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.GetExtendedInterface(SconMgr);
destComponent.RuntimeConnectionCollection[0].ConnectionManagerID = SconMgr.ID;
//dataFlowTask.PathCollection.New().AttachPathAndPropagateNotifications(dataConvertComponent.OutputCollection[0], destComponent.InputCollection[0]);
dataFlowTask.PathCollection.New().AttachPathAndPropagateNotifications(dataConvertComponent.OutputCollection[0], destComponent.InputCollection[0]);
////Mapping
// Get the destination's default input and virtual input.
IDTSOutput100 outputdest = destComponent.OutputCollection[0];
IDTSVirtualInput100 virtualInputdest = destComponent.InputCollection[0].GetVirtualInput();
IDTSInput100 inputdest = destComponent.InputCollection[0];
string dd = destComponent.InputCollection[0].InputColumnCollection.ToString();
//foreach (IDTSVirtualInputColumn100 vColumn in virtualInputdest.VirtualInputColumnCollection)
//{
// srcDesignTimeComponentdest.MapInputColumn(inputdest.ID, virtualInputdest.ID, outputdest.ExternalMetadataColumnCollection[vColumn.Name].ID);
//}
SIFISO_app.SaveToXml("D:\\C Drive\\Desktop\\DataExportWizard_Source\\SSIS\\SSIS\\pkg_Execute_Sql_Tasks.dtsx", package, null);
DTSExecResult pkgResults = package.Execute();
if (pkgResults == DTSExecResult.Success)
Console.WriteLine("Package ran successfully");
else
Console.WriteLine("Package failed");
Jumpingboy