使用EZAPI EzDerivedColumn和输入列接收警告消息

时间:2014-02-25 19:09:54

标签: ssis ssis-2012 ezapi

我正在与EZApi合作,协助创建一个用于转换数据的数据包。它在数据移动方面起作用。在设计器中打开包时,会在Derived Column周围显示警告消息,并将InputColumns设置为只读。

  

警告148验证警告。暂存TableName:   {AA700319-FC05-4F06-A877-599E826EA833}:“附加   Columns.Inputs [派生列输入] .Columns [DataSourceID]“on   “其他列”的使用类型为READONLY,但未引用   一种表达。从可用输入列表中删除列   列,或在表达式中引用它。 StageFull.dtsx 0 0

我可以在设计器中手动更改它们以进行读/写或取消选择它们,警告就会消失。但是,我无法以编程方式将其工作。

我尝试从元数据中删除列,但不会从组件中删除它们,因此仍会在xml中创建列。

XML部分

<externalMetadataColumn refId="Package\Full\Staging TableName\DestinationStaging TableName.Inputs[OLE DB Destination Input].ExternalColumns[DataSourceID]" dataType="i4" name="DataSourceID" />

当我尝试使用component.DeleteInput(id)转到底层对象并删除列时,我收到一条错误消息,指出无法删除输入列。

0xC0208010
-1071611888
DTS_E_CANTDELETEINPUT
An input cannot be deleted from the inputs collection.

以下是我用于创建具有OLEDB源,派生列和OLE DB目标的数据流任务的代码。

请注意,在派生列附加到Source之后,输入列才会出现:dc.AttachTo(source);

 public class EzMyDataFlow : EzDataFlow
    {
        public EzMyDataFlow(EzContainer parent, EzSqlOleDbCM sourceconnection,
          EzSqlOleDbCM destinationconnection, string destinationtable, string sourcecomannd, string dataflowname)
            : base(parent)
        {
            Name = dataflowname;

            EzOleDbSource source = new EzOleDbSource(this);
            source.Connection = sourceconnection;
            source.SqlCommand = sourcecomannd;
            source.AccessMode = AccessMode.AM_SQLCOMMAND;
            source.Name = string.Format("Source_{0}", dataflowname);

            EzDerivedColumn dc = new EzDerivedColumn(this);

            dc.Name = "Additional Columns";

            // Setup DataSourceID
            string columnName = DBSchema.ReportFoundationalColumns.DataSourceID;
            dc.InsertOutputColumn(columnName);
            dc.SetOutputColumnDataTypeProperties(columnName, DataType.DT_I4, 0, 0, 0, 0);
            var c = dc.OutputCol(columnName);
            var property = c.CustomPropertyCollection["Expression"];
            property.Name = "Expression";
            property.Value = "@[TM::SourceDatabaseID]";
            property = c.CustomPropertyCollection["FriendlyExpression"];
            property.Name = "FriendlyExpression";
            property.Value = "@[TM::SourceDatabaseID]";

            dc.AttachTo(source);

            EzOleDbDestination destination = new EzOleDbDestination(this);
            destination.Table = destinationtable;
            destination.Connection = destinationconnection;
            destination.Name = string.Format("Destination{0}", dataflowname);
            destination.AttachTo(dc);
        }
    }

0 个答案:

没有答案