private static bool DoesColumnMetaDataMatch(IDTSInputColumn100 column, IDTSVirtualInputColumn100 vColumn) { if (vColumn.DataType == column.DataType && vColumn.Precision == column.Precision && vColumn.Length == column.Length && vColumn.Scale == column.Scale) { return true; } return false; }
public static void AddColumnIsIdentifierProperty(IDTSInputColumn100 column) { bool isExist = false; foreach (IDTSCustomProperty100 customProperty in column.CustomPropertyCollection) { if (customProperty.Name == "IsIdentifier") isExist = true; } if (!isExist) { IDTSCustomProperty100 isIdentifier = column.CustomPropertyCollection.New(); isIdentifier.Name = "IsIdentifier"; isIdentifier.Description = "Indicates whether the column is part of what identifies the row."; isIdentifier.Value = false; } }
public void AddPathsAndConnectColumns(Hashtable colPairs) { IDTSOutput100 srcOutput = srcComp.OutputCollection[0]; IDTSOutputColumnCollection100 srcOutputCols = srcOutput.OutputColumnCollection; IDTSInput100 destInput = destComp.InputCollection[0]; IDTSInputColumnCollection100 destInputCols = destInput.InputColumnCollection; IDTSExternalMetadataColumnCollection100 destExtCols = destInput.ExternalMetadataColumnCollection; Hashtable destColtable = new Hashtable(destExtCols.Count); foreach (IDTSExternalMetadataColumn100 extCol in destExtCols) { destColtable.Add(extCol.Name, extCol); } bool useMatch = (colPairs != null && colPairs.Count > 0); // colConvertTable stores a pair of columns which need a type conversion // colConnectTable stores a pair of columns which dont need a type conversion and can be connected directly. Hashtable colConvertTable = new Hashtable(srcOutputCols.Count); Hashtable colConnectTable = new Hashtable(srcOutputCols.Count); foreach (IDTSOutputColumn100 outputCol in srcOutputCols) { // Get the column name to look for in the destination. // Match column by name if match table is not used. String colNameToLookfor = String.Empty; if (useMatch) { colNameToLookfor = (String)colPairs[outputCol.Name]; } else { colNameToLookfor = outputCol.Name; } IDTSExternalMetadataColumn100 extCol = (String.IsNullOrEmpty(colNameToLookfor)) ? null : (IDTSExternalMetadataColumn100)destColtable[colNameToLookfor]; // Does the destination column exist? if (extCol != null) { // Found destination column, but is data type conversion needed? if (NeedConvert(outputCol.DataType, extCol.DataType)) { colConvertTable.Add(outputCol.ID, extCol); } else { colConnectTable.Add(outputCol.ID, extCol); } } } if (colConvertTable.Count > 0) { // add convert component AddConvertComponent(colConvertTable, colConnectTable); pipeline.PathCollection.New().AttachPathAndPropagateNotifications(convertComp.OutputCollection[0], destInput); } else { // Convert transform not needed. Connect src and destination directly. pipeline.PathCollection.New().AttachPathAndPropagateNotifications(srcOutput, destInput); } IDTSVirtualInput100 destVirInput = destInput.GetVirtualInput(); foreach (object key in colConnectTable.Keys) { int colID = (int)key; IDTSExternalMetadataColumn100 extCol = (IDTSExternalMetadataColumn100)colConnectTable[key]; // Create an input column from an output col of previous component. destVirInput.SetUsageType(colID, DTSUsageType.UT_READONLY); IDTSInputColumn100 inputCol = destInputCols.GetInputColumnByLineageID(colID); if (inputCol != null) { // map the input column with an external metadata column destDesignTimeComp.MapInputColumn(destInput.ID, inputCol.ID, extCol.ID); } } }
internal BipsProxyIDTSInputColumn100(IDTSInputColumn100 innerObject) { _innerObject = innerObject; }
static void Main(string[] args) { try { //package - top level container var myPackage = new Package(); myPackage.Name = "My SSIS Practice"; myPackage.PackageType = DTSPackageType.DTSDesigner100; myPackage.VersionBuild = 1; //connections var mySourceConnection = myPackage.Connections.Add("OLEDB"); mySourceConnection.Name = "My Source Connection"; mySourceConnection.ConnectionString = "Provider=SQLOLEDB.1; Integrated Security=SSPI;Initial Catalog=ExamOneQC; Data Source=QADBATEST;"; var myDestConnection = myPackage.Connections.Add("OLEDB"); myDestConnection.Name = "My Destination Connection"; myDestConnection.ConnectionString = "Provider=SQLOLEDB.1; Integrated Security=SSPI;Initial Catalog=ExamCentral; Data Source=(local);"; //Dataflow Task var myPipelineTask = myPackage.Executables.Add("STOCK:PipelineTask"); var myPipelineTaskHost = myPipelineTask as TaskHost; if (myPipelineTaskHost == null) { return; } myPipelineTaskHost.Name = "My Pipeline Task Host"; myPipelineTaskHost.FailPackageOnFailure = false; myPipelineTaskHost.FailParentOnFailure = false; myPipelineTaskHost.DelayValidation = true; myPipelineTaskHost.Description = "This is My Pipeline Task Host"; var myMainPipe = myPipelineTaskHost.InnerObject as MainPipe; if (myMainPipe == null) { return; } //source DTS component var myNativeSource = myMainPipe.ComponentMetaDataCollection.New(); myNativeSource.ComponentClassID = "DTSAdapter.OLEDBSource"; var myManagedSource = myNativeSource.Instantiate(); myManagedSource.ProvideComponentProperties(); //source requires a connection if (myNativeSource.RuntimeConnectionCollection.Count > 0) { myNativeSource.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.GetExtendedInterface(myPackage.Connections[0]); myNativeSource.RuntimeConnectionCollection[0].ConnectionManagerID = myPackage.Connections[0].ID; } //set source properties myManagedSource.SetComponentProperty("AccessMode", 0); myManagedSource.SetComponentProperty("OpenRowset", "[dbo].[wwhs_app]"); //connect, populate metadata into source, release myManagedSource.AcquireConnections(null); myManagedSource.ReinitializeMetaData(); myManagedSource.ReleaseConnections(); //conditional split DTS transform Component var myTransformMeta = myMainPipe.ComponentMetaDataCollection.New(); myTransformMeta.ComponentClassID = "DTSTransform.ConditionalSplit"; //get managed wrapper var myManagedTransform = myTransformMeta.Instantiate(); myManagedTransform.ProvideComponentProperties(); //set boilerplate values myTransformMeta.InputCollection[0].ExternalMetadataColumnCollection.IsUsed = false; myTransformMeta.InputCollection[0].HasSideEffects = false; //connect, populate metadata into transform, release myManagedTransform.AcquireConnections(null); myManagedTransform.ReinitializeMetaData(); myManagedTransform.ReleaseConnections(); //connect source to the transform var mySourceToTransformPath = myMainPipe.PathCollection.New(); mySourceToTransformPath.AttachPathAndPropagateNotifications(myNativeSource.OutputCollection[0], myTransformMeta.InputCollection[0]); //expression requires columns, they, in turn, require a UsageType, so this must precede any expression assignment IDTSInput100 myNativeInputColCondSplit = myTransformMeta.InputCollection[0]; IDTSVirtualInput100 myVirtualInputColCondSplit = myNativeInputColCondSplit.GetVirtualInput(); foreach (IDTSVirtualInputColumn100 vColumn in myVirtualInputColCondSplit.VirtualInputColumnCollection) { myManagedTransform.SetUsageType(myNativeInputColCondSplit.ID, myVirtualInputColCondSplit, vColumn.LineageID, DTSUsageType.UT_READONLY); } //conditional transform var newOutputCollection = myTransformMeta.OutputCollection.New(); newOutputCollection.Name = "MyConditionalSplitName"; newOutputCollection.HasSideEffects = false; newOutputCollection.ExclusionGroup = 1; newOutputCollection.ExternalMetadataColumnCollection.IsUsed = false; newOutputCollection.ErrorRowDisposition = DTSRowDisposition.RD_IgnoreFailure; newOutputCollection.TruncationRowDisposition = DTSRowDisposition.RD_IgnoreFailure; newOutputCollection.ErrorOrTruncationOperation = "Computation";//WTH is this? newOutputCollection.SynchronousInputID = myTransformMeta.InputCollection[0].ID; //transformation condition IDTSCustomProperty100 myCondSplitProps = newOutputCollection.CustomPropertyCollection.New(); myCondSplitProps.ContainsID = true; myCondSplitProps.Name = "Expression"; myCondSplitProps.Value = "[WORKING_OFC_CODE] == \"1276\""; //SSIS Expression are not the same as T-SQL myCondSplitProps.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY; myCondSplitProps = newOutputCollection.CustomPropertyCollection.New(); myCondSplitProps.Name = "FriendlyExpression"; myCondSplitProps.Value = "[WORKING_OFC_CODE] == \"1276\""; myCondSplitProps.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY; myCondSplitProps = newOutputCollection.CustomPropertyCollection.New(); myCondSplitProps.Name = "EvaluationOrder"; myCondSplitProps.Value = "0"; myCondSplitProps.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY; //destination OLEDB Component var myNativeDest = myMainPipe.ComponentMetaDataCollection.New(); myNativeDest.ComponentClassID = "DTSAdapter.OLEDBDestination"; var myManagedDest = myNativeDest.Instantiate(); myManagedDest.ProvideComponentProperties(); //destination requires a connection if (myNativeDest.RuntimeConnectionCollection.Count > 0) { myNativeDest.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.GetExtendedInterface(myPackage.Connections[1]); myNativeDest.RuntimeConnectionCollection[0].ConnectionManagerID = myPackage.Connections[1].ID; } myManagedDest.SetComponentProperty("AccessMode", 3); myManagedDest.SetComponentProperty("OpenRowset", "[dbo].[wwhs_app]"); myManagedDest.AcquireConnections(null); myManagedDest.ReinitializeMetaData(); myManagedDest.ReleaseConnections(); var myTransformToDestPath = myMainPipe.PathCollection.New(); myTransformToDestPath.AttachPathAndPropagateNotifications(myTransformMeta.OutputCollection["MyConditionalSplitName"], myNativeDest.InputCollection[0]); IDTSInput100 destInputCollection = myNativeDest.InputCollection[0]; IDTSVirtualInput100 destInputVirtualCollection = destInputCollection.GetVirtualInput(); foreach (IDTSVirtualInputColumn100 vColumn in destInputVirtualCollection.VirtualInputColumnCollection) { IDTSInputColumn100 cCol = myManagedDest.SetUsageType(destInputCollection.ID, destInputVirtualCollection, vColumn.LineageID, DTSUsageType.UT_READWRITE); var cinputColumnName = vColumn.Name; var columnExists = (from item in destInputCollection.ExternalMetadataColumnCollection.Cast <IDTSExternalMetadataColumn100>() where item.Name == cinputColumnName select item).Count(); if (columnExists > 0) { myManagedDest.MapInputColumn(destInputCollection.ID, cCol.ID, destInputCollection.ExternalMetadataColumnCollection[vColumn.Name]. ID); } } var myApplication = new Application(); myApplication.SaveToXml(@"C:\Projects\31g\trunk\temp\MySSISPackageFromCode.dtsx", myPackage, null); myPackage.Execute(); myPackage.Dispose(); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } Console.ReadKey(); }
public override DTSValidationStatus Validate() { Boolean isCanceled = false; Boolean fireAgain = false; // Only one input is supported. if (ComponentMetaData.InputCollection.Count > 1) { ComponentMetaData.FireError(0, ComponentMetaData.Name, TOO_MANY_INPUTS_MESSAGE, String.Empty, 0, out isCanceled); return(DTSValidationStatus.VS_ISCORRUPT); } // Only one output is supported. if (ComponentMetaData.OutputCollection.Count > 1) { ComponentMetaData.FireError(0, ComponentMetaData.Name, TOO_MANY_OUTPUTS_MESSAGE, String.Empty, 0, out isCanceled); return(DTSValidationStatus.VS_ISCORRUPT); } this.ResolveComponentCustomProperties(); // Data profile file must exist. if (!File.Exists(_dataProfileFileName)) { ComponentMetaData.FireError(0, ComponentMetaData.Name, String.Format(DATA_PROFILE_FILE_NOT_FOUND_MESSAGE_PATTERN, _dataProfileFileName), String.Empty, 0, out isCanceled); return(DTSValidationStatus.VS_ISBROKEN); } else { ComponentMetaData.FireInformation(0, ComponentMetaData.Name, String.Format(DATA_PROFILE_FILE_FOUND_MESSAGE_PATTERN, _dataProfileFileName), String.Empty, 0, ref fireAgain); // Data profile file must contain at least one Regular Expressions pattern for the specified column name. Int32 regexPatternCount = _regexPatterns.Count(); if (regexPatternCount > 0) { ComponentMetaData.FireInformation(0, ComponentMetaData.Name, String.Format(REGEX_PATTERNS_LOADED_MESSAGE_PATTERN, regexPatternCount), String.Empty, 0, ref fireAgain); } else { if (!this.DataProfileColumnExists(_dataProfileFileName, _dataProfileColumnName)) { ComponentMetaData.FireWarning(0, ComponentMetaData.Name, String.Format(DATA_PROFILE_COLUMN_NOT_FOUND_MESSAGE_PATTERN, _dataProfileFileName, _dataProfileColumnName), String.Empty, 0); return(DTSValidationStatus.VS_ISBROKEN); } else { ComponentMetaData.FireWarning(0, ComponentMetaData.Name, String.Format(REGEX_PATTERNS_NOT_FOUND_MESSAGE_PATTERN, _dataProfileFileName, _dataProfileColumnName), String.Empty, 0); return(DTSValidationStatus.VS_ISBROKEN); } } } // The input column must exist and must be of a supported data type. if (String.IsNullOrEmpty(_emailAddressInputColumnName)) { ComponentMetaData.FireError(0, ComponentMetaData.Name, INPUT_COLUMN_NOT_SET_MESSAGE, String.Empty, 0, out isCanceled); return(DTSValidationStatus.VS_ISBROKEN); } else { IDTSInputColumn100 inputColumn = ComponentMetaData.InputCollection[INPUT_NAME].InputColumnCollection[_emailAddressInputColumnName]; if (inputColumn == null) { ComponentMetaData.FireError(0, ComponentMetaData.Name, String.Format(INPUT_COLUMN_NOT_FOUND_MESSAGE_PATTERN, inputColumn.Name), String.Empty, 0, out isCanceled); return(DTSValidationStatus.VS_ISBROKEN); } else { ComponentMetaData.FireInformation(0, ComponentMetaData.Name, String.Format(INPUT_COLUMN_FOUND_MESSAGE_PATTERN, inputColumn.Name), String.Empty, 0, ref fireAgain); if (inputColumn.DataType != DataType.DT_NTEXT && inputColumn.DataType != DataType.DT_TEXT && inputColumn.DataType != DataType.DT_STR && inputColumn.DataType != DataType.DT_WSTR) { ComponentMetaData.FireError(0, ComponentMetaData.Name, String.Format(INPUT_COLUMN_DATATYPE_NOT_SUPPORTED_MESSAGE_PATTERN, inputColumn.DataType.ToString(), inputColumn.Name), String.Empty, 0, out isCanceled); return(DTSValidationStatus.VS_ISBROKEN); } } } // v2 try { RegexOptions regexOptions = (RegexOptions)_regexOptionsNumber; Regex regex = new Regex(@".", regexOptions); } catch (ArgumentOutOfRangeException) { ComponentMetaData.FireError(0, ComponentMetaData.Name, String.Format(REGEX_OPTIONS_UNKNOWN_MESSAGE_PATTERN, _regexOptionsNumber.ToString()), String.Empty, 0, out isCanceled); return(DTSValidationStatus.VS_ISBROKEN); } return(base.Validate()); }
private void mappingGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) { // Ignore cell header changes! if (e.RowIndex < 0) { return; } // Ignore any clicks on the source column name if (e.ColumnIndex == 1) { return; } // Get the currently selected input/virtual input, and virtual input column from // the changed row. IDTSInput100 input = component_.InputCollection[0]; IDTSVirtualInput100 vInput = input.GetVirtualInput(); // Use the column name in column 1 of the grid to find the lineage id // of the column we're editing. IDTSVirtualInputColumn100 vColumn = vInput.VirtualInputColumnCollection.GetVirtualInputColumnByLineageID(mapColumnNameToLineageID_[(string)mappingGridView.Rows[e.RowIndex].Cells[1].Value]); // pull out the first column value to determine if the cell is mapped. bool mapped = (bool)mappingGridView.Rows[e.RowIndex].Cells[0].Value; // If the checkbox cell is the one that changed, we need to either set or clear the properties. if (e.ColumnIndex == 0) { if (mapped) { // Map the column vInput.SetUsageType(vColumn.LineageID, DTSUsageType.UT_READONLY); // Fetch the IDTSInputColumn100 now that it is mapped. IDTSInputColumn100 inputColumn = input.InputColumnCollection.GetInputColumnByLineageID(vColumn.LineageID); // Enable editing the other columns mappingGridView.Rows[e.RowIndex].Cells[2].ReadOnly = false; mappingGridView.Rows[e.RowIndex].Cells[3].ReadOnly = false; } else { // The mapping for this column is unchecked. // Declare this virtual input column as unused mappingGridView.Rows[e.RowIndex].Cells[2].ReadOnly = true; mappingGridView.Rows[e.RowIndex].Cells[3].ReadOnly = true; vInput.SetUsageType(vColumn.LineageID, DTSUsageType.UT_IGNORED); } } if (e.ColumnIndex == 2 && mapped) { // The destination column for this input column has been specified // Map this column to the appropriate external metadata column input.InputColumnCollection.GetInputColumnByLineageID(vColumn.LineageID).ExternalMetadataColumnID = mapExternalColumnNameToID_[(string)mappingGridView.Rows[e.RowIndex].Cells[2].Value]; } if (!manualEditMode_) { refreshMergeStatement(); mergeStatementRichTextBox.Text = mergeStatement_; } }
public InputColumnMapping(IDTSInputColumn100 inputColumn, IDTSExternalMetadataColumn100 outputColumn) { InputColumn = inputColumn; OutputColumn = outputColumn; }
protected void ProcessMappings() { IDTSVirtualInput100 cvi = Component.InputCollection[0].GetVirtualInput(); var virtualInputDictionary = new Dictionary <string, IDTSVirtualInputColumn100>(); foreach (IDTSVirtualInputColumn100 vc in cvi.VirtualInputColumnCollection) { virtualInputDictionary["@" + vc.Name.ToUpperInvariant()] = vc; } // Automatically map columns foreach (IDTSExternalMetadataColumn100 extCol in Component.InputCollection[0].ExternalMetadataColumnCollection) { if (virtualInputDictionary.ContainsKey(extCol.Name.ToUpperInvariant())) { IDTSVirtualInputColumn100 vc = virtualInputDictionary[extCol.Name.ToUpperInvariant()]; Instance.SetUsageType(Component.InputCollection[0].ID, cvi, vc.LineageID, DTSUsageType.UT_READONLY); Component.InputCollection[0].InputColumnCollection[vc.Name].ExternalMetadataColumnID = extCol.ID; } } // Map any overrides foreach (AstDataflowColumnMappingNode mapping in _astOleDBCommandNode.Query.Mappings) { if (String.IsNullOrEmpty(mapping.TargetName)) { SetInputColumnUsage(0, mapping.SourceName, DTSUsageType.UT_IGNORED, true); } else { IDTSExternalMetadataColumn100 ecol = TransformationUtility.FindExternalColumnByName(mapping.TargetName, Component.InputCollection[0].ExternalMetadataColumnCollection, true); // Unmap anything else that maps to this external metadata column) foreach (IDTSInputColumn100 inputColumn in Component.InputCollection[0].InputColumnCollection) { if (inputColumn.ExternalMetadataColumnID == ecol.ID) { MessageEngine.Trace(_astOleDBCommandNode, Severity.Debug, "V0401", "{0}: {1} Unmapping Input {2}", GetType(), Component.Name, inputColumn.Name); SetInputColumnUsage(0, inputColumn.Name, DTSUsageType.UT_IGNORED, true); break; } } IDTSInputColumn100 icol = SetInputColumnUsage(0, mapping.SourceName, DTSUsageType.UT_READONLY, false); if (ecol != null) { if (icol != null) { icol.ExternalMetadataColumnID = ecol.ID; } else { MessageEngine.Trace(_astOleDBCommandNode, Severity.Error, "V0105", "Could not find source column {0}", mapping.SourceName); } } else { MessageEngine.Trace(_astOleDBCommandNode, Severity.Error, "V0106", "Could not find destination column {0}", mapping.TargetName); } } } }
public override void ProcessInput(int inputID, PipelineBuffer buffer) { Layer OGRLayer = this.getLayer(); FeatureDefn OGRFeatureDef = OGRLayer.GetLayerDefn(); int batchCount = 0; OGRLayer.StartTransaction(); //initialize columnInfo object columnInfo ci = new columnInfo(); while (buffer.NextRow()) { try { //Start transaction if (this.batchSize != 0 && batchCount % this.batchSize == 0) { OGRLayer.CommitTransaction(); OGRLayer.StartTransaction(); batchCount = 0; } Feature OGRFeature = new Feature(OGRFeatureDef); for (int i = 0; i < this.columnInformation.Count; i++) { ci = this.columnInformation[i]; if (!buffer.IsNull(ci.bufferColumnIndex)) { if (ci.geom) { byte[] geomBytes = new byte[buffer.GetBlobLength(ci.bufferColumnIndex)]; geomBytes = buffer.GetBlobData(ci.bufferColumnIndex, 0, geomBytes.Length); Geometry geom = Geometry.CreateFromWkb(geomBytes); OGRFeature.SetGeometry(geom); } else { int OGRFieldIndex = OGRFeatureDef.GetFieldIndex(ci.columnName); FieldDefn OGRFieldDef = OGRFeatureDef.GetFieldDefn(OGRFieldIndex); FieldType OGRFieldType = OGRFieldDef.GetFieldType(); //declare datetime variables DateTime dt; TimeSpan ts; switch (OGRFieldType) { //case FieldType.OFTBinary: // break; case FieldType.OFTDate: dt = buffer.GetDate(ci.bufferColumnIndex); OGRFeature.SetField(OGRFieldIndex, dt.Year, dt.Month, dt.Day, 0, 0, 0, 0); break; case FieldType.OFTDateTime: dt = buffer.GetDateTime(ci.bufferColumnIndex); //get timezone? OGRFeature.SetField(OGRFieldIndex, dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, 0); break; case FieldType.OFTInteger: OGRFeature.SetField(OGRFieldIndex, buffer.GetInt32(ci.bufferColumnIndex)); break; case FieldType.OFTInteger64: OGRFeature.SetField(OGRFieldIndex, buffer.GetInt64(ci.bufferColumnIndex)); break; case FieldType.OFTReal: OGRFeature.SetField(OGRFieldIndex, buffer.GetDouble(ci.bufferColumnIndex)); break; case FieldType.OFTTime: ts = buffer.GetTime(ci.bufferColumnIndex); OGRFeature.SetField(OGRFieldIndex, 0, 0, 0, ts.Hours, ts.Minutes, ts.Seconds, 0); break; case FieldType.OFTString: default: OGRFeature.SetField(OGRFieldIndex, buffer.GetString(ci.bufferColumnIndex)); break; } } } } OGRLayer.CreateFeature(OGRFeature); batchCount++; //increment incrementPipelinePerfCounters to display correct # of rows written ComponentMetaData.IncrementPipelinePerfCounter(103, 1); } catch (Exception ex) { //Redirect row IDTSInputColumn100 inputColumn = ComponentMetaData.InputCollection[0].InputColumnCollection.GetInputColumnByLineageID(ci.lineageID); IDTSOutput100 output = ComponentMetaData.OutputCollection[0]; if (ci.errorDisposition == DTSRowDisposition.RD_RedirectRow) { int errorCode = System.Runtime.InteropServices.Marshal.GetHRForException(ex); buffer.DirectErrorRow(output.ID, errorCode, inputColumn.LineageID); } else if (ci.errorDisposition == DTSRowDisposition.RD_FailComponent || ci.errorDisposition == DTSRowDisposition.RD_NotUsed) { OGRLayer.RollbackTransaction(); ComponentMetaData.FireError(0, ComponentMetaData.Name, ex.Message, string.Empty, 0, out cancel); throw new Exception(ex.Message); } } } OGRLayer.CommitTransaction(); }
/// <summary> /// Adds the custom XML-mapping properties to the input column. Used when /// we map a column. /// </summary> private void AddCustomInputColumnProps(IDTSInputColumn100 column) { IDTSCustomProperty100 tag = column.CustomPropertyCollection.New(); tag.Name = Constants.AttributeOrElementNameProperty; tag.Description = Localized.AttributeOrElementNamePropertyDescription; IDTSCustomProperty100 style = column.CustomPropertyCollection.New(); style.Name = Constants.StyleProperty; style.Description = Localized.ElementStylePropertyDescription; }
static protected void AddInputColumnProperty(IDTSInputColumn100 inputColumn, string name, string description, object value) { AddProperty(inputColumn.CustomPropertyCollection, name, description, value, null); }
/// <summary> /// 入力列のデータ型をチェックする /// </summary> /// <param name="inputColumn">入力列</param> /// <param name="types">チェックするデータ型</param> /// <returns>typesの中に一つでもinputColumn.DataTypeと一致するものがあったらtrue</returns> private bool ValidateDataType(IDTSInputColumn100 inputColumn, params DataType[] types) { return(types.Any(x => x == inputColumn.DataType)); }
/// <summary> /// Called prior to ProcessInput, the buffer column index, index of the character to change, and the operation for each /// column in the input collection is read, and stored. /// </summary> public override void PreExecute() { this.xmlNamespace = this.ComponentMetaData.CustomPropertyCollection[ this.customPropertiesList[XMLIfyCustomPropites.XMLNAMESPACE].Name].Value as string; this.columnElementName = this.ComponentMetaData.CustomPropertyCollection[ this.customPropertiesList[XMLIfyCustomPropites.COLUMNELEMENTNAME].Name].Value as string; this.nameAttributeName = this.ComponentMetaData.CustomPropertyCollection[ this.customPropertiesList[XMLIfyCustomPropites.NAMEATTRIBUTENAME].Name].Value as string; this.nullAttributeName = this.ComponentMetaData.CustomPropertyCollection[ this.customPropertiesList[XMLIfyCustomPropites.NULLATTRIBUTENAME].Name].Value as string; this.rowElementName = this.ComponentMetaData.CustomPropertyCollection[ this.customPropertiesList[XMLIfyCustomPropites.ROWELEMENTNAME].Name].Value as string; this.includeColumnName = (bool) this.ComponentMetaData.CustomPropertyCollection[ this.customPropertiesList[XMLIfyCustomPropites.INCLUDECOLUMNNAME].Name].Value; this.elementFormat = (bool) this.ComponentMetaData.CustomPropertyCollection[ this.customPropertiesList[XMLIfyCustomPropites.ELEMENTFORMAT].Name].Value; this.includeXMLTag = (bool) this.ComponentMetaData.CustomPropertyCollection[ this.customPropertiesList[XMLIfyCustomPropites.INCLUDEXMLTAG].Name].Value; IDTSInput100 input = this.ComponentMetaData.InputCollection[0]; this.inputColumnInfos = new ColumnInfo[input.InputColumnCollection.Count]; for (int i = 0; i < input.InputColumnCollection.Count; i++) { IDTSInputColumn100 column = input.InputColumnCollection[i]; this.inputColumnInfos[i] = new ColumnInfo { BufferColumnIndex = this.BufferManager.FindColumnByLineageID( input.Buffer, column.LineageID), ColumnDisposition = column.ErrorRowDisposition, LineageId = column.LineageID, Name = column.Name }; } IDTSOutput100 output = this.ComponentMetaData.OutputCollection[0]; this.outputColumnInfos = new ColumnInfo[output.OutputColumnCollection.Count]; for (int i = 0; i < output.OutputColumnCollection.Count; i++) { IDTSOutputColumn100 column = output.OutputColumnCollection[i]; this.outputColumnInfos[i] = new ColumnInfo { BufferColumnIndex = this.BufferManager.FindColumnByLineageID( input.Buffer, column.LineageID), ColumnDisposition = column.ErrorRowDisposition, LineageId = column.LineageID, Name = column.Name }; } }
// Users like implicit conversion, // so it is allowed but some warnings can be thrown. private void checkTypes(IDTSInputColumn100 iDTSInpCol, IDTSExternalMetadataColumn100 iDTSExtCol) { // implicit conversion allowed bool isLong = false; DataType dataTypeInp = ConvertBufferDataTypeToFitManaged(iDTSInpCol.DataType, ref isLong); DataType dataTypeExt = iDTSExtCol.DataType; if ((dataTypeInp == dataTypeExt)&& (dataTypeInp == DataType.DT_WSTR || dataTypeInp == DataType.DT_BYTES)) { if (iDTSInpCol.Length > iDTSExtCol.Length) { ErrorSupport.FireWarningWithArgs( HResults.DTS_W_POTENTIALTRUNCATIONFROMDATAINSERTION, iDTSInpCol.Name, iDTSInpCol.Length, iDTSExtCol.Name, iDTSExtCol.Length); } } // check for numeric types including integers and floating numbers if (!IsCompatibleNumericTypes(dataTypeInp, dataTypeExt)) { // The warning message would display mismatched SSIS numeric types // and inform user an alternative way // to do conversion is by using our data conversion component which // converts between SSIS types. ErrorSupport.FireWarningWithArgs( HResults.DTS_W_ADODESTPOTENTIALDATALOSS, iDTSInpCol.Name, Enum.GetName(typeof(DataType), dataTypeInp), iDTSExtCol.Name, Enum.GetName(typeof(DataType), dataTypeExt)); } }
public DataFlowInputColumnNodeFactory(IDTSInputColumn100 inputColumn) { _inputColumn = inputColumn; }
IDTSVirtualInputColumn100 GetVirtualInputColumn(IDTSInputColumn100 inputColumn) { try { return this.VirtualInput.VirtualInputColumnCollection.GetVirtualInputColumnByLineageID(inputColumn.LineageID); } catch (Exception ex) { this.ReportErrors(ex); return null; } }
/// <summary> /// 入力列のデータ型をチェックする /// </summary> /// <param name="inputColumn">入力列</param> /// <param name="types">チェックするデータ型</param> /// <returns>typesの中に一つでもinputColumn.DataTypeと一致するものがあったらtrue</returns> private bool ValidateDataType(IDTSInputColumn100 inputColumn, params DataType[] types) { return types.Any(x => x == inputColumn.DataType); }