C # Изменить строку подключения, которая существует внутри библиотеки - PullRequest
1 голос
/ 07 апреля 2010

У меня есть библиотека классов, внутри которой есть только DataSet (MySQL-коннектор) и класс Connector.

Я использую этот класс в нескольких проектах для подключения к базе данных, и у меня всегда был пароль, встроенный в строку подключения, но теперь мне нужно иметь возможность изменить эту строку (в целях безопасности), чтобы пользователь мог подключиться используя свой аккаунт.

Как я могу изменить эту строку подключения.

Я пробовал следующее

Properties.Settings.Default.DataBaseConnectionString = "String";

Но похоже, что строка подключения доступна только для чтения, поскольку она не имеет установочного значения.

Я тоже безуспешно попробовал следующее

Properties.Settings.Default.DatabaseConnectionString.Insert(
Properties.Settings.Default.DatabaseConnectionConnectionString.Length - 1,
            "Password=dbpassword;");

Ответы [ 4 ]

5 голосов
/ 07 апреля 2010

Вы можете изменить их так:

Properties.Settings.Default["MyConnectionString"] = newCnnStr;

Для полного решения, которое также сохраняет новое значение в файл, вам нужно сделать что-то вроде этого:

    private static void ModifyConnectionStrings()
    {
        // Change the value in the config file first
        var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        const string newCnnStr = "server=(local);database=MyDb;user id=user;password=secret";
        config.ConnectionStrings.ConnectionStrings["MyProject.Properties.Settings.MyConnectionString"].ConnectionString = newCnnStr;
        config.Save(ConfigurationSaveMode.Modified, true);

        // Now edit the in-memory values to match
        Properties.Settings.Default["MyConnectionString"] = newCnnStr;
    }

Если ваш набор данных находится в другой сборке, вы все равно можете сделать это, если вы сделаете настройки для этой сборки общедоступными. Для этого:

  1. Щелкните правой кнопкой мыши проект в обозревателе решений и выберите Свойства
  2. Перейдите на вкладку Настройки .
  3. Измените Модификатор доступа на «Публичный», сохраните и закройте.

Затем вы можете сделать это (при условии, что другой проект называется «MyProject.DataLayer»):

    private static void ModifyConnectionStrings()
    {
        // Change the value in the config file first
        var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        const string newCnnStr = "server=(local);database=MyDb;user id=user;password=secret";
        config.ConnectionStrings.ConnectionStrings["MyProject.Properties.Settings.MyConnectionString"].ConnectionString = newCnnStr;
        config.ConnectionStrings.ConnectionStrings["MyProject.DataLayer.Properties.Settings.MyConnectionString"].ConnectionString = newCnnStr;
        config.Save(ConfigurationSaveMode.Modified, true);

        // Now edit the in-memory values to match
        Properties.Settings.Default["MyConnectionString"] = newCnnStr;
        MyProject.DataLayer.Properties.Settings.Default["MyConnectionString"] = newCnnStr;
    }
0 голосов
/ 07 апреля 2010

Похоже, что вы загружаете строку подключения из файла конфигурации, вы сможете изменить ее оттуда. После сборки это будет файл с именем, аналогичным скомпилированной форме, плюс .config. (Например application.exe.config)

0 голосов
/ 07 апреля 2010

Я думаю, вы спрашиваете, как вы можете изменить свойства строки соединения во время выполнения в зависимости от того, кто использует приложение. Надеюсь, это поможет.

В прошлом я делал это, заставляя мою строку подключения содержать параметры, которые я могу предоставить, используя string.Format.

    <connectionStrings>
        <add name="SomeDB" connectionString="("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Database Password={1}"" />
    </connectionStrings>

string connectionString = string.Format(ConfigurationManager.ConnectionStrings["SomeDB"].ConnectionString, location, password);
0 голосов
/ 07 апреля 2010

Разве у вас нет исходного кода этого класса?

Кроме того, но немного более сложным методом будет исправление сборки с использованием Reflector с Reflexil AddIn .

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