Settings.Designer文件和静态

Ref*_*din 1 c# settings data-access-layer winforms

我有一个DAL类库,它作为DLL包含在我的程序中.以下行来自DAL以初始化连接.

DataSet ds = new DataSet("table");
        SqlConnection cnn = new SqlConnection(Settings.CMOSQLConn);
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我收到以下错误:

An unhandled exception of type 'System.StackOverflowException' occurred in CMO.DAL.dll
Run Code Online (Sandbox Code Playgroud)

以下是在Settings.Designer.cs文件中,它在get调用中显示错误:

        [global::System.Configuration.ApplicationScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
    [global::System.Configuration.DefaultSettingValueAttribute("Data Source=WWCSTAGE;Initial Catalog=CMO;Persist Security Info=True;User ID=CMOWe" +
        "bService;Password=ecivreSbeWOMC")]
    public static string CMOSQLConn {
        get {
            return (CMOSQLConn);
        }
    }
Run Code Online (Sandbox Code Playgroud)

任何人都有任何想法的想法?是因为连接字符串存储在dll而不是我的主应用程序中?我真的很坚持这一点,非常感谢任何帮助!

编辑1

我在下面尝试了格雷格的建议:

        public static string CMOSQLConn {
        get {
            return (Settings.CMOSQLConn);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我仍然得到同样的错误...还有更多想法吗?谢谢到目前为止!

编辑2

所以我按照下面重新设置文件的建议,现在我的设置文件看起来像这样 - >

public string CMOSQLConn {
        get {
            return ((string)(this["CMOSQLConn"]));
        }
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,现在我不会编译这个语句 - >

            SqlConnection cnn = new SqlConnection(Settings.CMOSQLConn);
Run Code Online (Sandbox Code Playgroud)

我现在得到这个错误 - >

Error   1   An object reference is required for the non-static field, method, or property 'CMO.DAL.Properties.Settings.CMOSQLConn.get'  B:\MyDocs\tmpPATRIOT\Projects\VS2008\DisConnectDAL\CMO.DAL\SupportWorker.cs 13  51  CMO.DAL
Run Code Online (Sandbox Code Playgroud)

这是我应该期待的吗?

谢谢!

Gre*_*g D 7

这是一个经典的c#属性错误.仔细检查您在您的物业中返回的物品 - 您将归还物业本身!名称解析将优先于本地名称而不是外部名称.你得到一个堆栈溢出,因为你在CMOSQLConn.get调用时遇到无限递归CMOSQLConn.get.

考虑回来Settings.CMOSQLConn.额外的规范应清楚地指出连接字符串的正确位置.

编辑:

哎呦!我没注意到你从设置设计器文件中粘贴了它.无限递归显然正在发生,但我担心你将不得不做更多的调查,以追查在这种情况下发生的原因.

您的设计器文件似乎生成不正确(!!!).在VS2008上,我的设置设计器getter看起来像:

public bool Foo{
    get {
        return ((bool)(this["Foo"]));
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您可能需要做类似的事情.IE:

public string CMOSQLConn
    get {
        return ((string)(this["CMOSQLConn"]));
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)