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;
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #4
0
 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_;
            }
        }
Beispiel #8
0
 public InputColumnMapping(IDTSInputColumn100 inputColumn, IDTSExternalMetadataColumn100 outputColumn)
 {
     InputColumn  = inputColumn;
     OutputColumn = outputColumn;
 }
Beispiel #9
0
        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();
        }
Beispiel #11
0
        /// <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;
        }
Beispiel #12
0
 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));
 }
 static protected void AddInputColumnProperty(IDTSInputColumn100 inputColumn, string name, string description, object value)
 {
     AddProperty(inputColumn.CustomPropertyCollection, name, description, value, null);
 }
Beispiel #15
0
        /// <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 InputColumnMapping(IDTSInputColumn100 inputColumn, IDTSExternalMetadataColumn100 outputColumn)
 {
     InputColumn = inputColumn;
     OutputColumn = outputColumn;
 }
 public DataFlowInputColumnNodeFactory(IDTSInputColumn100 inputColumn)
 {
     _inputColumn = inputColumn;
 }
Beispiel #19
0
 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);
 }