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