public override IDTSInputColumn100 SetUsageType(int inputID, IDTSVirtualInput100 virtualInput, int lineageID, DTSUsageType usageType) { IDTSInputColumn100 inputColumn = null; IDTSOutput100 output = this.ComponentMetaData.OutputCollection[0]; IDTSOutputColumnCollection100 outputColumnCollection = output.OutputColumnCollection; IDTSInput100 input = this.ComponentMetaData.InputCollection[0]; IDTSInputColumnCollection100 inputColumnCollection = input.InputColumnCollection; if (usageType == DTSUsageType.UT_IGNORED) { inputColumn = inputColumnCollection.GetInputColumnByLineageID(lineageID); IDTSOutputColumn100 outputColumn = outputColumnCollection.FindObjectByID(inputColumn.MappedColumnID); if (outputColumn != null) { outputColumnCollection.RemoveObjectByID(outputColumn.ID); } inputColumn = base.SetUsageType(inputID, virtualInput, lineageID, usageType); } else { inputColumn = base.SetUsageType(inputID, virtualInput, lineageID, usageType); IDTSOutputColumn100 outputColumn = outputColumnCollection.New(); outputColumn.Name = inputColumn.Name; outputColumn.SetDataTypeProperties(inputColumn.DataType, inputColumn.Length, inputColumn.Precision, inputColumn.Scale, inputColumn.CodePage); outputColumn.MappedColumnID = inputColumn.LineageID; inputColumn.MappedColumnID = outputColumn.LineageID; AddInputColumnProperty(inputColumn, GeoColumnPropName, "True if the column holds geometry objects to be joined together.", false); AddInputColumnProperty(inputColumn, GroupByColumnPropName, "True if the column holds group by values.", false); } return(inputColumn); }
public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols) { if (sourceOutputCols.Count <= 0) { throw new InvalidOperationException("Source component has empty output"); } StringBuilder sb = new StringBuilder("CREATE TABLE "); sb.Append(String.Format(CultureInfo.InvariantCulture, "{0} (", quotedSheetName)); foreach (IDTSOutputColumn100 col in sourceOutputCols) { String SqlType = "nvarchar(255)"; sb.Append(GetQuotedName(col.Name, prefix, suffix)); sb.Append(SqlType); sb.Append(", "); } sb.Remove(sb.Length - 2, 2); // remove last ", " sb.Append(");"); String sql = sb.ToString(); using (OleDbConnection conn = new OleDbConnection()) { conn.ConnectionString = ConnectionString; conn.Open(); OleDbCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); conn.Close(); } }
public override void SetOutputColumnDataTypeProperties(int iOutputID, int iOutputColumnID, DataType eDataType, int iLength, int iPrecision, int iScale, int iCodePage) { IDTSOutputCollection100 outputColl = ComponentMetaData.OutputCollection; IDTSOutput100 output = outputColl.GetObjectByID(iOutputID); if (output != null) { if (output.IsErrorOut) { this.PostErrorAndThrow(MessageStrings.CantChangeErrorOutputProperties); } else { IDTSOutputColumnCollection100 columnColl = output.OutputColumnCollection; IDTSOutputColumn100 column = columnColl.GetObjectByID(iOutputColumnID); if (column != null) { if (ValidateSupportedDataTypes(eDataType) == DTSValidationStatus.VS_ISVALID) { column.SetDataTypeProperties(eDataType, iLength, iPrecision, iScale, iCodePage); } else { throw new COMException(string.Empty, E_FAIL); } } } } }
public override void SetOutputColumnDataTypeProperties(int iOutputID, int iOutputColumnID, DataType eDataType, int iLength, int iPrecision, int iScale, int iCodePage) { IDTSOutputCollection100 outputColl = ComponentMetaData.OutputCollection; IDTSOutput100 output = outputColl.GetObjectByID(iOutputID); IDTSOutputColumnCollection100 columnColl = output.OutputColumnCollection; IDTSOutputColumn100 column = columnColl.GetObjectByID(iOutputColumnID); column.SetDataTypeProperties(eDataType, iLength, iPrecision, iScale, iCodePage); }
private void BadRowsRedirect(IDTSComponentMetaData100 sourceTask, IDTSComponentMetaData100 badRowsTask) { IDTSOutput100 srcOutput = sourceTask.OutputCollection[0]; IDTSOutputColumnCollection100 srcOutputCols = srcOutput.OutputColumnCollection; sourceTask.UsesDispositions = true; foreach (IDTSOutputColumn100 outputCol in srcOutputCols) { outputCol.ErrorRowDisposition = DTSRowDisposition.RD_RedirectRow; outputCol.TruncationRowDisposition = DTSRowDisposition.RD_RedirectRow; } }
public override void SetOutputColumnDataTypeProperties(int outputID, int outputColumnID, Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType dataType, int length, int precision, int scale, int codePage) { IDTSOutputCollection100 outputColl = this.ComponentMetaData.OutputCollection; IDTSOutput100 output = outputColl.GetObjectByID(outputID); IDTSOutputColumnCollection100 columnColl = output.OutputColumnCollection; IDTSOutputColumn100 column = columnColl.GetObjectByID(outputColumnID); column.SetDataTypeProperties(dataType, length, precision, scale, codePage); }
private void BuildOutputColumnMaps() { this.outputColumnIndexMap.Clear(); IDTSOutput100 output = this.ComponentMetaData.OutputCollection[0]; IDTSOutputColumnCollection100 outputColumnCollection = output.OutputColumnCollection; foreach (IDTSOutputColumn100 outputColumn in outputColumnCollection) { int outputColumnLineageID = outputColumn.LineageID; this.outputColumnIndexMap.Add(outputColumnLineageID, this.BufferManager.FindColumnByLineageID(output.Buffer, outputColumnLineageID)); } }
public static IDTSOutputColumn100 AddKeyOutputColumns(IDTSOutput100 keyRecords) { IDTSOutputColumnCollection100 outputColumnCollection = keyRecords.OutputColumnCollection; IDTSOutputColumn100 outputColumn = outputColumnCollection.NewAt(0); outputColumn.Name = MessageStrings.KeyRecordKeyColumnName; outputColumn.SetDataTypeProperties(DataType.DT_GUID, 0, 0, 0, 0); outputColumn.Description = MessageStrings.KeyRecordKeyColumnDescription; ManageProperties.AddOutputColumnProperties(outputColumn.CustomPropertyCollection); ManageProperties.SetPropertyValue(outputColumn.CustomPropertyCollection, ManageProperties.usageOfColumn, Utilities.usageOfColumnEnum.Key); ManageProperties.SetPropertyValue(outputColumn.CustomPropertyCollection, ManageProperties.keyOutputColumnID, -2); return(outputColumn); }
/// <summary> /// Add the columns required to the Error Output. /// </summary> /// <param name="errorOutput">The actual error output</param> public static void AddErrorOutputColumns(IDTSOutput100 errorOutput) { IDTSOutputColumnCollection100 outputColumnCollection = errorOutput.OutputColumnCollection; IDTSOutputColumn100 outputColumn = outputColumnCollection.New(); outputColumn.Name = MessageStrings.ErrorMessageColumnName; outputColumn.SetDataTypeProperties(DataType.DT_WSTR, 4000, 0, 0, 0); ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection); outputColumn = outputColumnCollection.New(); outputColumn.Name = MessageStrings.ColumnDataColumnName; outputColumn.SetDataTypeProperties(DataType.DT_WSTR, 4000, 0, 0, 0); ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection); outputColumn = outputColumnCollection.New(); outputColumn.Name = MessageStrings.RowDataColumnName; outputColumn.SetDataTypeProperties(DataType.DT_WSTR, 4000, 0, 0, 0); ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection); }
public static void New(this IDTSOutputColumnCollection100 collection, string name, ColumnType columnType, int length = 0, int scale = 0, int precision = 0, int codePage = 0, string description = null) { if (collection.Cast <IDTSOutputColumn100>().Any(col => col.Name == name)) { return; } var issueId = collection.New(); issueId.Name = name; if (!string.IsNullOrWhiteSpace(description)) { issueId.Description = description; } DataType type; switch (columnType) { case ColumnType.String: if (length <= 0 || length > 8000) { throw new Exception($"Для колонки {name} строкового типа указано некорректное значение длины."); } if (length <= 4000) { type = DataType.DT_WSTR; } else { type = DataType.DT_STR; if (codePage == 0) { throw new Exception($"Для колонки {name} строкового типа с длиной более 4000 необходимо указать кодовую страницу."); } } break; case ColumnType.Date: type = DataType.DT_DATE; break; default: throw new Exception($"Неизвестный тип колонки {name}."); } issueId.SetDataTypeProperties(type, length, scale, precision, codePage); }
public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols) { if (!File.Exists(filePath)) { FileStream fs = File.Create(filePath); fs.Close(); } else { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "File {0} already exists. Select a different file name to avoid overwrite.", filePath)); } int numCols = sourceOutputCols.Count; if (numCols == 0) { throw new InvalidOperationException("Cannot create flat file destination columns because source component has no output columns."); } colNames = new String[numCols]; colTypes = new wrapper.DataType[numCols]; colPrecisions = new int[numCols]; colScales = new int[numCols]; colLengths = new int[numCols]; for (int i = 0; i < numCols; i++) { colLengths[i] = sourceOutputCols[i].Length; colNames[i] = sourceOutputCols[i].Name; colTypes[i] = sourceOutputCols[i].DataType; // This sample does not support unicode if (colTypes[i] == wrapper.DataType.DT_WSTR) { colTypes[i] = wrapper.DataType.DT_STR; } else if (colTypes[i] == wrapper.DataType.DT_NTEXT) { colTypes[i] = wrapper.DataType.DT_TEXT; } colScales[i] = sourceOutputCols[i].Scale; colPrecisions[i] = sourceOutputCols[i].Precision; } }
/// <summary> /// Adds the columns that are required to the Number Of Rows output /// </summary> /// <param name="numberOfRows">the number of rows output</param> public static void AddNumberOfRowsOutputColumns(IDTSOutput100 numberOfRows) { IDTSOutputColumnCollection100 outputColumnCollection = numberOfRows.OutputColumnCollection; IDTSOutputColumn100 outputColumn = outputColumnCollection.New(); outputColumn.Name = MessageStrings.KeyValueColumnName; outputColumn.SetDataTypeProperties(DataType.DT_STR, DefaultStringColumnSize, 0, 0, 1252); outputColumn.Description = MessageStrings.KeyValueColumnDescription; ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection); outputColumn = outputColumnCollection.New(); outputColumn.Name = MessageStrings.NumberOfRowsColumnName; outputColumn.SetDataTypeProperties(DataType.DT_I8, 0, 0, 0, 0); outputColumn.Description = MessageStrings.NumberOfRowsColumnDescription; ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection); outputColumn = outputColumnCollection.New(); outputColumn.Name = MessageStrings.KeyValueStatusColumnName; outputColumn.SetDataTypeProperties(DataType.DT_STR, DefaultStringColumnSize, 0, 0, 1252); outputColumn.Description = MessageStrings.KeyValueStatusColumnDescription; ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection); }
public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols) { if (sourceOutputCols.Count <= 0) { throw new InvalidOperationException("Source component has empty output"); } StringBuilder sb = new StringBuilder("CREATE TABLE "); sb.Append(String.Format(CultureInfo.InvariantCulture, "{0} (", quotedTableName)); foreach (IDTSOutputColumn100 col in sourceOutputCols) { String SqlType = ConvertColumnTypeToSqlServer(col.DataType); if (SqlType.Length != 0) { String formatted = ComposeCreateParamsStringSql(SqlType, col.Length, col.Precision, col.Scale); sb.Append(GetQuotedName(col.Name, prefix, suffix)); sb.Append(SqlType); sb.Append(formatted); sb.Append(", "); } else { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "failed to construct sql statement for col {0} with type {1}", col.Name, col.DataType)); } } sb.Remove(sb.Length - 2, 2); // remove last ", " sb.Append(");"); String sql = sb.ToString(); using (OleDbConnection conn = new OleDbConnection()) { conn.ConnectionString = ConnectionString; conn.Open(); OleDbCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); conn.Close(); } }
/// <summary> /// Checks to see if the column metadata collection has different column names/numbers than those names passed in as parameter /// </summary> /// <param name="newcols"></param> /// <returns></returns> private bool ColumnMetadataChanged(string[] newcols) { IDTSOutputColumnCollection100 outputcolumns = ComponentMetaData.OutputCollection[0].OutputColumnCollection; if (outputcolumns.Count != newcols.GetLength(0)) { return(true); } else { for (int n = 0; n < newcols.GetLength(0); n++) { if (outputcolumns[n].Name != newcols[n]) { return(true); } } return(false); } }
public void TestBuildOutputColumn(String elementname, BsonValue bsonValue, DataType expectedDataType, int length, int codepage) { PrivateObject p = new PrivateObject(typeof(MongoDataSource.MongoDataSource)); IDTSOutput100 output = Mock.Create <IDTSOutput100>(Constructor.Mocked); IDTSOutputColumnCollection100 outputCollection = Mock.Create <IDTSOutputColumnCollection100>(Constructor.Mocked); IDTSOutputColumn100 expected = Mock.Create <IDTSOutputColumn100>(Constructor.Mocked); Mock.Arrange(() => outputCollection.New()).Returns(expected); Mock.Arrange(() => output.OutputColumnCollection).Returns(outputCollection); Mock.Arrange(() => output.IsErrorOut).Returns(true); BsonElement el = new BsonElement(elementname, bsonValue); Mock.ArrangeSet(() => expected.Name = Arg.Matches <String>(x => x == elementname)); IDTSOutputColumn100 actual = (IDTSOutputColumn100)p.Invoke("BuildOutputColumn", new object[] { output, el }); Mock.Assert(() => expected.SetDataTypeProperties(expectedDataType, length, 0, 0, codepage)); Mock.ArrangeSet(() => expected.ErrorRowDisposition = Arg.Matches <DTSRowDisposition>(x => x == DTSRowDisposition.RD_FailComponent)).OccursOnce(); Mock.ArrangeSet(() => expected.TruncationRowDisposition = Arg.Matches <DTSRowDisposition>(x => x == DTSRowDisposition.RD_FailComponent)).OccursOnce(); }
public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols) { if (sourceOutputCols.Count <= 0) throw new InvalidOperationException("Source component has empty output"); StringBuilder sb = new StringBuilder("CREATE TABLE "); sb.Append(String.Format(CultureInfo.InvariantCulture, "{0} (", quotedTableName)); foreach (IDTSOutputColumn100 col in sourceOutputCols) { String SqlType = ConvertColumnTypeToSqlServer(col.DataType); if (SqlType.Length != 0) { String formatted = ComposeCreateParamsStringSql(SqlType, col.Length, col.Precision, col.Scale); sb.Append(GetQuotedName(col.Name, prefix, suffix)); sb.Append(SqlType); sb.Append(formatted); sb.Append(", "); } else { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "failed to construct sql statement for col {0} with type {1}", col.Name, col.DataType)); } } sb.Remove(sb.Length - 2, 2); // remove last ", " sb.Append(");"); String sql = sb.ToString(); using (OleDbConnection conn = new OleDbConnection()) { conn.ConnectionString = ConnectionString; conn.Open(); OleDbCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); conn.Close(); } }
internal BipsProxyIDTSOutputColumnCollection100(IDTSOutputColumnCollection100 innerObject) { _innerObject = innerObject; }
public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols) { if (sourceOutputCols.Count <= 0) throw new InvalidOperationException("Source component has empty output"); StringBuilder sb = new StringBuilder("CREATE TABLE "); sb.Append(String.Format(CultureInfo.InvariantCulture, "{0} (", quotedSheetName)); foreach (IDTSOutputColumn100 col in sourceOutputCols) { String SqlType = "nvarchar(255)"; sb.Append(GetQuotedName(col.Name, prefix, suffix)); sb.Append(SqlType); sb.Append(", "); } sb.Remove(sb.Length - 2, 2); // remove last ", " sb.Append(");"); String sql = sb.ToString(); using (OleDbConnection conn = new OleDbConnection()) { conn.ConnectionString = ConnectionString; conn.Open(); OleDbCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); conn.Close(); } }
private IDTSOutputColumn100 BuildOutputColumn(IDTSOutputColumnCollection100 outputColumnCollection, BsonElement bsonElement) { IDTSOutputColumn100 outColumn = outputColumnCollection.New(); // Set the properties of the output column. outColumn.Name = bsonElement.Name; DataType dt = GetColumnDataType(bsonElement.Value); int length = 0; int codepage = 0; if (dt == DataType.DT_STR) { length = 256; codepage = 1252; } outColumn.SetDataTypeProperties(dt, length, 0, 0, codepage); return outColumn; }
public abstract void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols);
private DTSValidationStatus ValidateOutputColumns(IDTSOutputColumnCollection100 outputColumnCollection, DTSValidationStatus oldStatus) { DTSValidationStatus returnStatus = oldStatus; foreach (IDTSOutputColumn100 outputColumn in outputColumnCollection) { returnStatus = ValidateOutputColumn(outputColumn, returnStatus); } return returnStatus; }
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); } } }