Settings.Designer file и Staticness - PullRequest
1 голос
/ 26 мая 2009

У меня есть библиотека классов DAL, которая включена в мою программу как DLL. Следующая строка от DAL для инициализации соединения.

DataSet ds = new DataSet("table");
        SqlConnection cnn = new SqlConnection(Settings.CMOSQLConn);

Когда я запускаю это, я получаю ошибку ниже:

An unhandled exception of type 'System.StackOverflowException' occurred in CMO.DAL.dll

Ниже приведен файл Settings.Designer.cs, где он показывает ошибку при получении вызова :

        [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);
        }
    }

У кого-нибудь есть идеи о том, что искать? Это потому, что строка подключения хранится в DLL вместо моего основного приложения? Я действительно застрял в этом и буду очень признателен за любую помощь!

РЕДАКТИРОВАТЬ 1

Я попробовал предложение Грега ниже:

        public static string CMOSQLConn {
        get {
            return (Settings.CMOSQLConn);
        }
    }

И я все еще получаю ту же ошибку ... Есть еще мысли? Пока спасибо!

РЕДАКТИРОВАТЬ 2

Поэтому я последовал предложению восстановить файл настроек ниже, и теперь мой файл настроек выглядит следующим образом ->

public string CMOSQLConn {
        get {
            return ((string)(this["CMOSQLConn"]));
        }
    }

К сожалению, это не скомпилируется сейчас, так как везде, где я имею это утверждение ->

            SqlConnection cnn = new SqlConnection(Settings.CMOSQLConn);

Теперь я получаю эту ошибку ->

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

Это то, что я должен ожидать?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 26 мая 2009

Это классическая ошибка свойств c #. Дважды проверьте, что вы возвращаете в свою собственность - вы возвращаете саму собственность! При разрешении имени локальное имя предпочтительнее внешнего. Вы получаете переполнение стека, потому что вы сталкиваетесь с бесконечной рекурсией, когда CMOSQLConn.get вызывает CMOSQLConn.get.

Подумайте о возвращении Settings.CMOSQLConn. Дополнительная спецификация должна четко указывать правильное расположение строки подключения.

EDIT:

Упс! Я не заметил, что вы вставили это из своего файла настроек. Бесконечная рекурсия явно происходит, но, боюсь, вам придется провести еще какое-то расследование, чтобы выяснить, почему это происходит в этом случае.

Похоже, что ваш дизайнерский файл был сгенерирован неправильно (!!!). На VS2008 мои геттеры дизайнеров настроек выглядят примерно так:

public bool Foo{
    get {
        return ((bool)(this["Foo"]));
    }
    // ...
}

Возможно, вам придется сделать что-то подобное. IE:

public string CMOSQLConn
    get {
        return ((string)(this["CMOSQLConn"]));
    }
    // ...
}
1 голос
/ 26 мая 2009

Попробуйте изменить свой код на это:

 public static string CMOSQLConn {
        get {
            return ((string)(this["CMOSQLConn"]));
        }
    }

Хм .. Хороший момент в комментариях. Я просто посмотрел в моем файле настроек VS и скопировал и вставил, не задумываясь. Что-то не так с вашим файлом настроек ... Не должно быть статического свойства для настроек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...