43

データフロー->スクリプトコンポーネント->SSISパッケージを使用したC#スクリプトで使用したC#コード内の変数にアクセスするにはどうすればよいですか?

私も試しましたが、これも機能していません

IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;

XlsFile = varCollection["User::FilePath"].Value.ToString();
4

6 に答える 6

71

(データフロータスクの)スクリプトコンポーネントでパッケージ変数にアクセスすることは、スクリプトタスクでパッケージ変数にアクセスすることと同じではありません。スクリプトコンポーネントの場合、最初にスクリプト変換エディターを開く必要があります(コンポーネントを右クリックして[編集...]を選択します)。[スクリプト]タブの[カスタムプロパティ]セクションで、読み取り専用または読み取り/書き込みベースで、スクリプトで使用できるようにするプロパティを入力(または選択)できます。 スクリプト変換エディターのプロパティページのスクリーンショット 次に、スクリプト自体の中で、変数は次のようになります。 Variablesオブジェクトの強く型付けされたプロパティとして使用できます。

// Modify as necessary
public override void PreExecute()
{
    base.PreExecute();
    string thePath = Variables.FilePath;
    // Do something ...
}

public override void PostExecute()
{
    base.PostExecute();
    string theNewValue = "";
    // Do something to figure out the new value...
    Variables.FilePath = theNewValue;
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    string thePath = Variables.FilePath;
    // Do whatever needs doing here ...
}

重要な注意点の1つは、パッケージ変数に書き込む必要がある場合は、PostExecute()メソッドでのみ書き込むことができるということです。

コードスニペットについて:

IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;

XlsFile = varCollection["User::FilePath"].Value.ToString();

varCollectionnullに初期化され、有効な値に設定されることはありません。したがって、それを逆参照しようとすると失敗します。

于 2012-11-19T17:51:29.810 に答える
11

まず、スクリプトタスクエディタのReadOnlyVariablesで、スクリプトタスクで使用する変数をリストし、スクリプトを編集します。

スクリプトコードでReadOnlyVariablesを使用するには

String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString();

このコード行は、ssisパッケージ変数を文字列として扱います。

于 2018-02-21T11:23:59.453 に答える
4

ReadOnlyVariablesを宣言することを覚えていることを除いて、OPと同じ問題がありました。

少し遊んだ後、問題となったのは変数の名前であることがわかりました。SSISの「File_Path」はどういうわけか「FilePath」に変換されました。C#は、変数名のアンダースコアとうまく連携しません。

したがって、変数にアクセスするには、次のように入力します

string fp = Variables.FilePath;

スクリプトコンポーネントのPreExecute()メソッド。

于 2018-02-20T22:43:03.017 に答える
2
  • 変数スクリプトのフロントプロパティページで、ReadOnlyVariables(またはReadWriteVariables)プロパティを修正し、目的の変数を選択します。これにより、スクリプトタスク内で選択した変数が有効になります。
  • コード内で、変数を次のように読み取るためのアクセス権があります。

    string myString = Variables.MyVariableName.ToString();

于 2012-11-19T11:12:52.413 に答える
0

強く型付けされたvarは利用できないようです。それらにアクセスするには、次のことを行う必要があります。

String MyVar = Dts.Variables["MyVarName"].Value.ToString();

于 2013-12-04T14:52:12.900 に答える
0

これは機能するはずです:

IDTSVariables100 vars = null;
VariableDispenser.LockForRead("System::TaskName");
VariableDispenser.GetVariables(vars);
string TaskName = vars["System::TaskName"].Value.ToString();
vars.Unlock();

最初のコードには、GetVariables()メソッドの呼び出しがありません。

于 2016-11-29T10:42:59.870 に答える