データフロー->スクリプトコンポーネント-> SSISパッケージを使用したc#スクリプトで使用したC#コード内の変数にアクセスするにはどうすればよいですか?
私も試してみましたが、動作していません
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;
XlsFile = varCollection["User::FilePath"].Value.ToString();
スクリプト内のパッケージ変数へのアクセス(データフロータスクの)Componentは、スクリプト内のパッケージ変数へのアクセスタスク。スクリプトコンポーネントの場合、最初に スクリプト変換エディター を開く必要があります(コンポーネントを右クリックして[編集...]を選択します)。 [スクリプト]タブの[カスタムプロパティ]セクションでは、読み取り専用または読み取り/書き込みベースで、スクリプトで使用できるようにするプロパティを入力(または選択)できます。 次に、スクリプト自体内で、変数は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つの重要な警告:パッケージ変数にwriteする必要がある場合は、PostExecute()メソッドでのみ行うことができます。
コードスニペットについて:
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;
XlsFile = varCollection["User::FilePath"].Value.ToString();
varCollection
はnullに初期化され、有効な値に設定されることはありません。したがって、any参照解除しようとすると失敗します。
最初に、スクリプトタスクエディターのReadOnlyVariablesでスクリプトタスクで使用する変数をリストし、スクリプトを編集します。
スクリプトコードでReadOnlyVariablesを使用するには
String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString();
このコード行は、ssisパッケージ変数を文字列として扱います。
ReadOnlyVariablesを宣言することを思い出したことを除いて、OPと同じ問題がありました。
何回か遊んだ後、問題の原因は変数の名前であることがわかりました。 SSISの「File_Path」が何らかの形で「FilePath」に変換されました。 C#は、変数名にアンダースコアを使用するとうまく機能しません。
変数にアクセスするには、次のように入力します
string fp = Variables.FilePath;
スクリプトコンポーネントのPreExecute()メソッド内。
コード内で、変数を次のように読み取ることができます。
string myString = Variables.MyVariableName.ToString();
これは動作するはずです:
IDTSVariables100 vars = null;
VariableDispenser.LockForRead("System::TaskName");
VariableDispenser.GetVariables(vars);
string TaskName = vars("System::TaskName").Value.ToString();
vars.Unlock();
最初のコードには、GetVariables()メソッドの呼び出しがありません。
厳密に型指定されたvarは使用できないようです。それらにアクセスするには、次を実行する必要があります。
String MyVar = Dts.Variables["MyVarName"].Value.ToString();