1

私は EZApi と協力して、変換用のデータをステージングするためのパッケージの作成を支援しています。データの移動に関しては機能しています。ただし、デザイナーでパッケージを開くと、派生列と InputColumns が読み取り専用に設定されているという警告メッセージが表示されます。

警告 148 検証警告。ステージング TableName: {AA700319-FC05-4F06-A877-599E826EA833}: "Additional Columns" の "Additional Columns.Inputs[Derived Column Input].Columns[DataSourceID]" の使用タイプは 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 変換先を持つデータ フロー タスクを作成するために使用しているコードです。

入力列は、派生列がソースにアタッチされるまで存在しないことに注意してください: 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);
        }
    }
4

0 に答える 0