|
[x]
Posted via EE Mobile
|
||
Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again. |
||
| Question |
|
[x]
Attachment Details
|
||
|
[x]
The Solution Rating System
|
||
With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.
Your Input Matters If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support. Thank you! |
||
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: |
Dictionary<int, string> derivedLineageIdentifiers = new Dictionary<int, string>();
string filepath = dbfFile.Remove(dbfFile.LastIndexOf(@"\"));
//set up the package
package = new Package();
//creates and executable (which translates to a dataflowtask in SSIS)
Executable exec = package.Executables.Add("STOCK:PipelineTask");
TaskHost taskHost = exec as TaskHost;
MainPipe dataFlowTask = taskHost.InnerObject as MainPipe;
/* ############################################ */
/* ADD THE VFP SOURCE COMPONENT TO THE DATAFLOW */
/* ############################################ */
//Creates the connection to the FoxPro dbf file
ConnectionManager cm = package.Connections.Add("OLEDB");
cm.Name = "FoxPro Connection Manager";
cm.ConnectionString = "Data Source=" + filepath + ";Provider=VFPOLEDB.1;Extended Properties=dBase 5.0;Collating Sequence=MACHINE;";//@"Provider=VFPOLEDB.1; DataSource=" + filepath + ";Extended Properties=dBase 5.0; Collating Sequence=general";
//Creates the source component and instantiates it
IDTSComponentMetaData90 sourceDataFlowComponent = dataFlowTask.ComponentMetaDataCollection.New();
sourceDataFlowComponent.Name = "Visual Fox Pro DBF Source";
sourceDataFlowComponent.ComponentClassID = "{2C0A8BE5-1EDC-4353-A0EF-B778599C65A0}";
CManagedComponentWrapper instance = sourceDataFlowComponent.Instantiate();
instance.ProvideComponentProperties();
//Specifies the connection manager
if (sourceDataFlowComponent.RuntimeConnectionCollection.Count > 0)
{
sourceDataFlowComponent.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.ToConnectionManager90(package.Connections[0]);
sourceDataFlowComponent.RuntimeConnectionCollection[0].ConnectionManagerID = package.Connections[0].ID;
}
//Set custom properties
instance.SetComponentProperty("AccessMode", 2);
instance.SetComponentProperty("SqlCommand", "select * from '" + dbfFile + "'");
instance.SetComponentProperty("DefaultCodePage", 1252);
instance.SetComponentProperty("AlwaysUseDefaultCodePage", false);
instance.SetComponentProperty("CommandTimeout", 0);
//Reinitialize the metadata (not sure this is required - will test)
instance.AcquireConnections(null);
instance.ReinitializeMetaData();
//Initialize and output Column
IDTSExternalMetadataColumn90 exOutColumn;
foreach (IDTSOutputColumn90 outColumn in sourceDataFlowComponent.OutputCollection[0].OutputColumnCollection)
{
exOutColumn = sourceDataFlowComponent.OutputCollection[0].ExternalMetadataColumnCollection[outColumn.Name];
instance.MapOutputColumn(sourceDataFlowComponent.OutputCollection[0].ID, outColumn.ID, exOutColumn.ID, true);
}
instance.ReleaseConnections();
/* ############################################ */
/* ADD TRANSFORMATION COMPONENT TO THE DATAFLOW */
/* ############################################ */
//Creates and configures the transformation component
IDTSComponentMetaData90 transformationDataFlowComponent = dataFlowTask.ComponentMetaDataCollection.New();
transformationDataFlowComponent.Name = "Derived Column Component";
//transformationDataFlowComponent.ComponentClassID = "DTSTransform.DataConvert.1";
transformationDataFlowComponent.ComponentClassID = "{9CF90BF0-5BCC-4C63-B91D-1F322DC12C26}";
CManagedComponentWrapper transformationInstance = transformationDataFlowComponent.Instantiate();
transformationInstance.ProvideComponentProperties();
transformationDataFlowComponent.InputCollection[0].ExternalMetadataColumnCollection.IsUsed = false;
transformationDataFlowComponent.InputCollection[0].HasSideEffects = false;
//Create the path from source to transformation
IDTSPath90 fPath = dataFlowTask.PathCollection.New();
fPath.AttachPathAndPropagateNotifications(sourceDataFlowComponent.OutputCollection[0], transformationDataFlowComponent.InputCollection[0]);
transformationInstance.AcquireConnections(null);
transformationInstance.ReinitializeMetaData();
//Get the output collection
IDTSOutput90 output = transformationDataFlowComponent.OutputCollection[0];
//Create the input columns for the transformation component
IDTSInput90 input;
IDTSVirtualInput90 vInput;
//Get the destinations default input and virtual input
input = transformationDataFlowComponent.InputCollection[0];
vInput = input.GetVirtualInput();
//Iterate through the virtual input column collection
foreach (IDTSVirtualInputColumn90 vColumn in vInput.VirtualInputColumnCollection)
{
IDTSInputColumn90 inputColumn = transformationInstance.SetUsageType(input.ID, vInput, vColumn.LineageID, DTSUsageType.UT_READONLY);
//propogate to output column collection.
//IDTSOutputColumn90 outputColumn = transformationInstance.InsertOutputColumnAt(output.ID, output.OutputColumnCollection.Count, vColumn.Name, "Sql server compatible conversion column");
IDTSOutputColumn90 outputColumn;
IDTSCustomProperty90 property;
/* for all the columns, search for the ones which are from the converted output collection
* then iterate through all these adding the derived column outputs while placing the IDs into
* a new derivedColumnLineageID collection
*/
switch (inputColumn.Name.ToUpper())
{
case "GROUP":
//for each new column remember to set new column name
outputColumn = transformationDataFlowComponent.OutputCollection[0].OutputColumnCollection.New();
outputColumn.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_WSTR, 1, inputColumn.Precision, inputColumn.Scale, 0);
outputColumn.Name = "status";
outputColumn.ExternalMetadataColumnID = 0;
property = outputColumn.CustomPropertyCollection.New();
property.Name = "Expression";
property.Value = "[SUBSTRING](#" + inputColumn.LineageID + ",5,1)";
property = outputColumn.CustomPropertyCollection.New();
property.Name = "FriendlyExpression";
property.Value = "SUBSTRING(GROUP,5,1)";
derivedLineageIdentifiers[outputColumn.LineageID] = outputColumn.Name;
//for each new column remember to set new column name
outputColumn = transformationDataFlowComponent.OutputCollection[0].OutputColumnCollection.New();
outputColumn.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_I4, 0, 0, 0, 0);
outputColumn.Name = "class";
outputColumn.ExternalMetadataColumnID = 0;
property = outputColumn.CustomPropertyCollection.New();
property.Name = "Expression";
property.Value = "(DT_I4)[SUBSTRING](#" + inputColumn.LineageID + ",9,[FINDSTRING]([RIGHT](#" + inputColumn.LineageID + ",[LEN](#" + inputColumn.LineageID + ") - 9),\"_\",1))";
property = outputColumn.CustomPropertyCollection.New();
property.Name = "FriendlyExpression";
property.Value = "(DT_I4)SUBSTRING(GROUP,9,FINDSTRING(RIGHT(GROUP,LEN(GROUP) - 9),\"_\",1))";
derivedLineageIdentifiers[outputColumn.LineageID] = outputColumn.Name;
//for each new column remember to set new column name
outputColumn = transformationDataFlowComponent.OutputCollection[0].OutputColumnCollection.New();
outputColumn.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_WSTR, inputColumn.Length, inputColumn.Precision, inputColumn.Scale, 0);
outputColumn.Name = "employer";
outputColumn.ExternalMetadataColumnID = 0;
property = outputColumn.CustomPropertyCollection.New();
property.Name = "Expression";
property.Value = "[FINDSTRING](#" + inputColumn.LineageID + ",\"_ER\",1) == 0 ? NULL(DT_WSTR,50) : [SUBSTRING](#" + inputColumn.LineageID + ",[FINDSTRING](#" + inputColumn.LineageID + ",\"_ER\",1) + 3,[FINDSTRING]([RIGHT](#" + inputColumn.LineageID + ",[LEN](#" + inputColumn.LineageID + ") - ([FINDSTRING](#" + inputColumn.LineageID + ",\"_ER\",1) + 3)),\"_\",1))";
property = outputColumn.CustomPropertyCollection.New();
property.Name = "FriendlyExpression";
property.Value = "FINDSTRING(GROUP,\"_ER\",1) == 0 ? NULL(DT_WSTR,50) : SUBSTRING(GROUP,FINDSTRING(GROUP,\"_ER\",1) + 3,FINDSTRING(RIGHT(GROUP,LEN(GROUP) - (FINDSTRING(GROUP,\"_ER\",1) + 3)),\"_\",1))";
derivedLineageIdentifiers[outputColumn.LineageID] = outputColumn.Name;
//for each new column remember to set new column name
outputColumn = transformationDataFlowComponent.OutputCollection[0].OutputColumnCollection.New();
outputColumn.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_I4, 0, 0, 0, 0);
outputColumn.Name = "age";
outputColumn.ExternalMetadataColumnID = 0;
property = outputColumn.CustomPropertyCollection.New();
property.Name = "Expression";
property.Value = "[FINDSTRING](#" + inputColumn.LineageID + ",\"_AG\",1) == 0 ? NULL(DT_I4) : (DT_I4)[SUBSTRING](#" + inputColumn.LineageID + ",[FINDSTRING](#" + inputColumn.LineageID + ",\"_AG\",1) + 3,[FINDSTRING]([RIGHT](#" + inputColumn.LineageID + ",[LEN](#" + inputColumn.LineageID + ") - ([FINDSTRING](#" + inputColumn.LineageID + ",\"_AG\",1) + 3)),\"_\",1))";
property = outputColumn.CustomPropertyCollection.New();
property.Name = "FriendlyExpression";
property.Value = "FINDSTRING(GROUP,\"_AG\",1) == 0 ? NULL(DT_I4) : (DT_I4)SUBSTRING(GROUP,FINDSTRING(GROUP,\"_AG\",1) + 3,FINDSTRING(RIGHT(GROUP,LEN(GROUP) - (FINDSTRING(GROUP,\"_AG\",1) + 3)),\"_\",1))";
derivedLineageIdentifiers[outputColumn.LineageID] = outputColumn.Name;
//for each new column remember to set new column name
outputColumn = transformationDataFlowComponent.OutputCollection[0].OutputColumnCollection.New();
outputColumn.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_I4, 0, 0, 0, 0);
outputColumn.Name = "individual";
outputColumn.ExternalMetadataColumnID = 0;
property = outputColumn.CustomPropertyCollection.New();
property.Name = "Expression";
property.Value = "[FINDSTRING](#25124,\"_\",3 + ([FINDSTRING](#" + inputColumn.LineageID + ",\"_ER\",1) == 0 ? 0 : 1) + ([FINDSTRING](#" + inputColumn.LineageID + ",\"_AG\",1) == 0 ? 0 : 1)) == 0 ? NULL(DT_I4) : (DT_I4)[SUBSTRING](#" + inputColumn.LineageID + ",1 + [FINDSTRING](#25124,\"_\",2 + ([FINDSTRING](#25124,\"_ER\",1) == 0 ? 0 : 1) + ([FINDSTRING](#" + inputColumn.LineageID + ",\"_AG\",1) == 0 ? 0 : 1)),-1 + [FINDSTRING](#25124,\"_\",3 + ([FINDSTRING](#" + inputColumn.LineageID + ",\"_ER\",1) == 0 ? 0 : 1) + ([FINDSTRING](#" + inputColumn.LineageID + ",\"_AG\",1) == 0 ? 0 : 1)) - [FINDSTRING](#" + inputColumn.LineageID + ",\"_\",2 + ([FINDSTRING](#" + inputColumn.LineageID + ",\"_ER\",1) == 0 ? 0 : 1) + ([FINDSTRING](#" + inputColumn.LineageID + ",\"_AG\",1) == 0 ? 0 : 1)))";
property = outputColumn.CustomPropertyCollection.New();
property.Name = "FriendlyExpression";
property.Value = "FINDSTRING(GROUP,\"_\",3 + (FINDSTRING(GROUP,\"_ER\",1) == 0 ? 0 : 1) + (FINDSTRING(GROUP,\"_AG\",1) == 0 ? 0 : 1)) == 0 ? NULL(DT_I4) : (DT_I4)SUBSTRING(GROUP,1 + FINDSTRING(GROUP,\"_\",2 + (FINDSTRING(GROUP,\"_ER\",1) == 0 ? 0 : 1) + (FINDSTRING(GROUP,\"_AG\",1) == 0 ? 0 : 1)),-1 + FINDSTRING(GROUP,\"_\",3 + (FINDSTRING(GROUP,\"_ER\",1) == 0 ? 0 : 1) + (FINDSTRING(GROUP,\"_AG\",1) == 0 ? 0 : 1)) - FINDSTRING(GROUP,\"_\",2 + (FINDSTRING(GROUP,\"_ER\",1) == 0 ? 0 : 1) + (FINDSTRING(GROUP,\"_AG\",1) == 0 ? 0 : 1)))";
derivedLineageIdentifiers[outputColumn.LineageID] = outputColumn.Name;
break;
case "PERIOD":
outputColumn = transformationDataFlowComponent.OutputCollection[0].OutputColumnCollection.New();
outputColumn.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_I4, 0, 0, 0, 0);
outputColumn.Name = "year";
outputColumn.ExternalMetadataColumnID = 0;
property = outputColumn.CustomPropertyCollection.New();
property.Name = "Expression";
property.Value = "(DT_I4)[RIGHT](#" + inputColumn.LineageID + ",[LEN](#" + inputColumn.LineageID + ") - 4)";
property = outputColumn.CustomPropertyCollection.New();
property.Name = "FriendlyExpression";
property.Value = "(DT_I4)RIGHT(PERIOD,LEN(PERIOD) - 4)";
derivedLineageIdentifiers[outputColumn.LineageID] = outputColumn.Name;
break;
case "TRAN_ORIG":
outputColumn = transformationDataFlowComponent.OutputCollection[0].OutputColumnCollection.New();
outputColumn.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_I4, 0, 0, 0, 0);
outputColumn.Name = "tranche";
outputColumn.ExternalMetadataColumnID = 0;
property = outputColumn.CustomPropertyCollection.New();
property.Name = "Expression";
property.Value = "#" + inputColumn.LineageID;
property = outputColumn.CustomPropertyCollection.New();
property.Name = "FriendlyExpression";
property.Value = "TRAN_ORIG";
derivedLineageIdentifiers[outputColumn.LineageID] = outputColumn.Name;
break;
//USE THESE CASES TO REMOVE THESE COLUMNS FROM THE OUTPUT
case "PRODUCT":
break;
case "PURPOSE":
break;
case "DISC_RATE":
break;
case "TIME":
break;
case "T_FROM":
break;
case "T_TO":
break;
case "INPUT_VAR":
break;
default:
outputColumn = transformationInstance.InsertOutputColumnAt(output.ID, output.OutputColumnCollection.Count, inputColumn.Name, "standard column");
outputColumn.ExternalMetadataColumnID = 0;
derivedLineageIdentifiers[outputColumn.LineageID] = outputColumn.Name;
break;
}
}
transformationInstance.ReleaseConnections();
/* ########################################### */
/* NOW ADD OUR THIRD COMPONENT TO THE DATAFLOW */
/* ########################################### */
//Creates the SQL destination connection
ConnectionManager cm2 = package.Connections.Add("OLEDB");
cm2.Name = "MS SQL Server 2005 Exodus Cash Flows DB";
cm2.ConnectionString = @"Provider=SQLNCLI.1;Data Source=HRGLADEV07;Initial Catalog=ExodusCashFlow;Integrated Security=SSPI;Auto Translate=false;";
//Creates the SQL destination component and instantiates it
IDTSComponentMetaData90 destination = dataFlowTask.ComponentMetaDataCollection.New();
destination.Name = "SQL Server Destination";
destination.ComponentClassID = "{E2568105-9550-4F71-A638-B7FE42E66922}";
CManagedComponentWrapper destDesignTime = destination.Instantiate();
destDesignTime.ProvideComponentProperties();
//Specify the connection manager for the component
if (destination.RuntimeConnectionCollection.Count > 0)
{
destination.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.ToConnectionManager90(package.Connections[1]);
destination.RuntimeConnectionCollection[0].ConnectionManagerID = package.Connections[1].ID;
}
//Set custom properties
destDesignTime.SetComponentProperty("AccessMode", 3);
destDesignTime.SetComponentProperty("OpenRowset", "[ExodusCashFlow].[dbo].[Cashflow]");
destDesignTime.SetComponentProperty("FastLoadOptions", "TABLOCK");
destDesignTime.SetComponentProperty("DefaultCodePage", 1252);
destDesignTime.SetComponentProperty("AlwaysUseDefaultCodePage", false);
//Create the path from transformation to destination
IDTSPath90 path = dataFlowTask.PathCollection.New();
//Get the output collection of one component and send it to another
path.AttachPathAndPropagateNotifications(transformationDataFlowComponent.OutputCollection[0],
destination.InputCollection[0]);
destDesignTime.AcquireConnections(null);
destDesignTime.ReinitializeMetaData();
input = destination.InputCollection[0];
vInput = input.GetVirtualInput();
foreach (IDTSVirtualInputColumn90 vColumn in vInput.VirtualInputColumnCollection)
{
if (derivedLineageIdentifiers.ContainsKey(vColumn.LineageID))
{
destDesignTime.SetUsageType(input.ID, vInput, vColumn.LineageID, DTSUsageType.UT_READONLY);
}
}
IDTSExternalMetadataColumn90 exColumn;
foreach (IDTSInputColumn90 inColumn in destination.InputCollection[0].InputColumnCollection)
{
exColumn = destination.InputCollection[0].ExternalMetadataColumnCollection[inColumn.Name.ToUpper()];
destDesignTime.MapInputColumn(destination.InputCollection[0].ID, inColumn.ID, exColumn.ID);
}
destDesignTime.ReleaseConnections();
ErrorEvents errors = new ErrorEvents();
Logging log = new Logging();
package.Validate(null, null, errors, null);
long start = DateTime.Now.Ticks;
DTSExecResult result = package.Execute(null, null, errors, null, null);
long end = DateTime.Now.Ticks;
lblResult.Text = result.ToString() + " TIME TAKEN: " + TimeSpan.FromTicks(end - start).TotalSeconds.ToString();
|
Advertisement
| Hall of Fame |