0

从脚本组件读取系统变量的最佳方法是什么。

尝试如下:当是用户变量时工作正常

    base.PreExecute();
    IDTSVariables100 variables = null;
    VariableDispenser.LockForRead("System::ContainerStartTime");
    VariableDispenser.GetVariables(out variables);
    auditTimeStamp = Convert.ToDateTime(variables[1].Value);
    System.Windows.Forms.MessageBox.Show(auditTimeStamp.ToString());
    variables.Unlock();

当试图读取系统变量时抛出以下错误:

脚本组件在用户代码中遇到异常:项目名称:SC_0bfc7da1c6fe4b83bc124b87eb4178e5 HRESULT 异常:0xC0010009

在 Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSVa​​riables100.get_Item(Object Index) 在 ScriptMain.PreExecute() 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PreExecute()

请提供任何线索。

谢谢

4

3 回答 3

2

您已更改索引,从

Convert.ToDateTime(variables[1].Value);

Convert.ToDateTime(variables[0].Value);
于 2013-06-04T15:07:18.797 回答
1

好的,完成了

        #region Class Variables

        int jobId;
        DateTime auditTimeStamp;
        IDTSVariables100 variables;
        const string tableName = "ORGANISATION_PROVIDER"; 

        #endregion

        public override void PreExecute()
        {
            #region On PreExecute - Get the JOB ID passed - COMMON
             base.PreExecute();
             variables= null;
             VariableDispenser.LockForWrite("System::ContainerStartTime");
             VariableDispenser.GetVariables(out variables);
             auditTimeStamp = Convert.ToDateTime(variables[0].Value);
             variables.Unlock();

           #endregion
        }

这很好用..不确定我以前做错了什么。

于 2010-02-01T01:16:44.027 回答
0

您可以创建一个用户变量,该变量被评估为引用系统变量的表达式。像这样的东西

@[System :: PackageName].
于 2010-01-30T23:25:56.133 回答