将静态变量设置为ssis变量 - 错误

时间:2014-01-31 19:22:42

标签: c# ssis

我有一个静态变量 -

static readonly String tableName;

我试着像这样设置

static readonly String tableName = Dts.Variables["ssisString"].Value.ToString();

我收到错误:

An object reference is required for the non-static field, method, or property. 

但是,它的工作原理如下:

static String tableName = ""; 

main()
{
     tableName = Dts.Variables["ssisString"].Value.ToString();
}

为什么?

2 个答案:

答案 0 :(得分:1)

这不是静态部分,而是readonly正在哄骗你。

enter image description here

    static readonly String tableName;

    static ScriptMain()
    {
        // An object reference is required for the non-static field, method, or property 'Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase.Dts.get'
        tableName = Dts.Variables["ssisString"].Value.ToString();
    }

    public void Main()
    {
        // this works
        string local = Dts.Variables["ssisString"].Value.ToString();

        // a static read only field cannot be assinged to (except in a static constructor or a variable initializer)
        tableName = Dts.Variables["ssisString"].Value.ToString();

        Dts.TaskResult = (int)ScriptResults.Success;
    }

我记得很清楚的静态信息是,该类的所有实例都有一个变量实例。因为只有一个ScriptMain实例,你从静态到实例变量得到了什么?

无论如何,tableName的一个实例,你想为它分配一个值。问题是,具有您想要使用的值的东西必须被实例化以提供该值。当您在Main方法内部分配时,这不是问题。

是一个问题,因为readonly属性只允许你在静态构造函数或变量初始化程序中赋值......这在我脑海中回到了需要实例的问题

一些.net的人,随意使用相应的术语来解决这个问题或改进这个答案。

参考

答案 1 :(得分:0)