示例#1
0
        private void GenerateExternalColumns()
        {
            var tableName = this.GetMemberTableName();

            using (DataTable metaData = this.GetMemberTableMetaData(tableName))
            {
                if (metaData != null)
                {
                    var input    = this.ComponentMetaData.InputCollection[INPUT_NAME];
                    var external = input.ExternalMetadataColumnCollection;

                    var count = metaData.Rows.Count;
                    for (int i = 0; i < count; i++)
                    {
                        var dataRow        = metaData.Rows[i];
                        var externalColumn = external.NewAt(i);
                        externalColumn.Name = (string)dataRow["ColumnName"];
                        var type     = (Type)dataRow["DataType"];
                        var dataType = PipelineComponent.DataRecordTypeToBufferType(type);
                        if ((bool)dataRow["IsLong"])
                        {
                            switch (dataType)
                            {
                            case DataType.DT_BYTES:
                                dataType = DataType.DT_IMAGE;
                                break;

                            case DataType.DT_STR:
                                dataType = DataType.DT_TEXT;
                                break;

                            case DataType.DT_WSTR:
                                dataType = DataType.DT_NTEXT;
                                break;
                            }
                        }
                        int length = 0;
                        if (dataType == DataType.DT_WSTR || dataType == DataType.DT_STR || dataType == DataType.DT_BYTES || dataType == DataType.DT_IMAGE || dataType == DataType.DT_NTEXT || dataType == DataType.DT_TEXT)
                        {
                            length = (int)dataRow["ColumnSize"];
                        }
                        int codePage = 0;
                        if (dataType == DataType.DT_STR)
                        {
                            codePage = -1;
                        }
                        int precision = 0;
                        int num       = 0;

                        if (dataType == DataType.DT_NUMERIC || dataType == DataType.DT_DECIMAL)
                        {
                            if (dataRow.IsNull("NumericPrecision"))
                            {
                                precision = 29;
                            }
                            else
                            {
                                precision = (int)Convert.ToInt16(dataRow["NumericPrecision"]);
                            }
                            if (dataRow.IsNull("NumericScale"))
                            {
                                num = 0;
                            }
                            else
                            {
                                num = (int)Convert.ToInt16(dataRow["NumericScale"]);
                            }
                            if (num == 255)
                            {
                                num = 0;
                            }
                        }
                        externalColumn.DataType  = dataType;
                        externalColumn.Length    = length;
                        externalColumn.Precision = precision;
                        externalColumn.Scale     = num;
                        externalColumn.CodePage  = codePage;

                        IDTSCustomProperty100 propType = externalColumn.CustomPropertyCollection.New();
                        propType.Name  = POSTGRES_TYPE;
                        propType.Value = dataRow["ProviderType"];
                    }
                }
            }
        }