С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/58: Рейтинг темы: голосов - 58, средняя оценка - 4.52
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446

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

24.09.2014, 22:40. Показов 11192. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

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

Делаю так:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
        public MainForm()
        {
            InitializeComponent();             
            Properties.Settings settings = Properties.Settings.Default;
            settings["borei"] = GetConnectionString();
        }
 
        private string GetConnectionString()
        {
            const string TEMPLATE_CONNECTION_STRING = @"Data Source={0};AttachDbFilename={1};Integrated Security={2};Connect Timeout={3}";
            const string TEMPLATE_PATH_TO_DATABASE = "{0}{1}\\{2}";
 
            const string DATA_SOURCE = "(LocalDB)\v11.0";
            const string INTEGRATED_SECURITY = "True";
            const string CONNECT_TIMEOUT = "30";
 
            const string DATABASE_FOLDER_NAME = "db";
            const string DATABASE_NAME = "main_db.mdf";
            
            string pathToCurrentFolder = Directory.GetCurrentDirectory();// = ...bin\\Debug
            int i = pathToCurrentFolder.IndexOf(Application.ProductName);
            string pathToSolutionFolder = pathToCurrentFolder.Substring(0, i);// = ...'Solutin name'\\
            string pathToDataBase = String.Format(TEMPLATE_PATH_TO_DATABASE,
                pathToSolutionFolder,
                DATABASE_FOLDER_NAME,
                DATABASE_NAME);
            string connectionString = String.Format(TEMPLATE_CONNECTION_STRING,
                DATA_SOURCE,
                pathToDataBase,
                INTEGRATED_SECURITY,
                CONNECT_TIMEOUT);
            return connectionString;
        }

получаю это:

App.config
Кликните здесь для просмотра всего текста

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="borei"
            connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\...\db\main_db.mdf;Integrated Security=True;Connect Timeout=30"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>


З.Ы. Самое приложение рабочее, т.е. данные из БД читаются хорошо.

Заранее спс!

//UPDATE
System.Configuration.Configuration как я понял устаревший и уменя его(в моей версии .NET) нету.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2014, 22:40
Ответы с готовыми решениями:

Изменить строку подключения в файле app
Имеется строка подключения типа этой: &lt;add name=&quot;DefaultConnection&quot; connectionString=&quot;Data Source=(LocalDb)\v11.0; Integrated...

Как изменить строку подключения fioConnectionString?
Сейчас так Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=|DataDirectory|\fio.mdb Как ее можно изменить на свой путь через код?

Как изменить строку подключения для Dataset'ов?
Здравсвуйте, крик отчаяния. Перечитал все темы, не могу сделать. И так: у меня есть программа, на главной вкладке авторизация с выбором...

11
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
24.09.2014, 23:05
Какая версия framework?Я делал так - в App.config храните строку.После компиляции она сохраняется в [ProjectName].exe.config.После запуска приложения в рантайме читаете ее и подключаетесь.

C#
1
2
3
private const string xmlConnectionStringName = "ConnectionStringName";
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
connectionString = ConfigurationManager.ConnectionStrings[xmlConnectionStringName].ConnectionString;
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
24.09.2014, 23:09  [ТС]
Цитата Сообщение от NowMatrix Посмотреть сообщение
Какая версия framework?
4.5

Сейчас попробую
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
24.09.2014, 23:12  [ТС]
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
24.09.2014, 23:13  [ТС]
Перепробовал все варианты, толку 0
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
24.09.2014, 23:14
Аа..это System.Configuration.Давно так делал на 4.0 framework.Потом просто в exe.config ручками меняешь строку подключения и все.
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
24.09.2014, 23:19  [ТС]
Ладно, спрошу подругому. Как решить проблему переносимости приложения на другие компы.
У меня есть решение с проектом.
В папке с решением лежит база данных.
Для вывода данных использую в GridView, использую Data Connection. Он жестко привязан к пути.

Как решить эту проблему, т.е. подставлять правильный путь, если я перенесу свое решение на другой компютер
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
24.09.2014, 23:28
Если совсем безвыходная ситуация - создайте xml такого вида
XML
1
2
3
4
5
6
7
<config>
  <connect>
    <server>AS-MS3-050053</server>
    <base>Returns_TEST</base>
    <connectionString>Data Source=AS-MS3-050053;Initial Catalog=Returns_TEST;Integrated Security=True</connectionString>
  </connect>
</config>
И читайте в рантайме

C#
1
2
3
4
5
6
7
8
9
10
11
12
private const string fileExtension = ".xml";
private const string xmlServerName = "server";
private const string xmlBaseName = "base";
 
FileInfo file = new DirectoryInfo(Directory.GetCurrentDirectory()).GetFiles().FirstOrDefault(x => x.Extension == fileExtension);
if (file == null)
    throw new FileNotFoundException(string.Format("Не найден файл настроек соединения с расширением '{0}'!", fileExtension));
 
XDocument xml = XDocument.Load(config.FilePath);
dataSource = xml.Descendants().Where(x => x.Name == xmlServerName).Select(x => x.Value).FirstOrDefault();
initialCatalog = xml.Descendants().Where(x => x.Name == xmlBaseName).Select(x => x.Value).FirstOrDefault();
connectionString = xml.Descendants().Where(x => x.Name == xmlConnectionString).Select(x => x.Value).FirstOrDefault();
Но нужно следить ,чтобы всегда этот файл был в нужном месте(не очень удобно)

Добавлено через 3 минуты
Цитата Сообщение от some_name Посмотреть сообщение
Для вывода данных использую в GridView, использую Data Connection. Он жестко привязан к пути.
Имеете ввиду в Settings указан?Если да,то Settings и app.config (если идет речь о строках подключения) жестко привязаны.Если меняется строка в Settings ,то в app.config тоже.
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
24.09.2014, 23:30  [ТС]
Но здесь же нет никакой автоматики, если я правильно понял. Все равно придется в файл руками писать, а из него склеивать строку подключения.

Или я что-то не понял?
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
24.09.2014, 23:34
Если хранить в app.config,то после компиляции он сохранится в [ProjectName.exe.config] - его править при переносе программы и читать,как я уже писал.Также если вы настраиваете строку через интерфейс в Settings(свойства проекта->настройки),то app.config синхронно с ним меняется.Выглядит он так:
XML
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="Returns.Properties.Settings.ReturnsConnectionString"
            connectionString="Data Source=as-ms3-050053;Initial Catalog=Returns;Integrated Security=True;User Instance=False"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
25.09.2014, 16:02
Цитата Сообщение от some_name Посмотреть сообщение
Нужно мне это для того, что бы при переноске приложения на другой компютер не заниматься рукоблудием.
пропишите относительный путь в конфиге и не парьтесь
0
 Аватар для Aferuga
644 / 528 / 324
Регистрация: 20.05.2015
Сообщений: 1,469
18.07.2016, 03:29
Не знаю насколько это правильно, но вроде работает...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System.Data.SqlClient;
using System.Configuration;
 
static void Main()
        {
            ConnectionStrings();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form11());
        }
 
        static void ConnectionStrings()
        {
 
                SqlConnectionStringBuilder connect1 =
                    new SqlConnectionStringBuilder();
                connect1.DataSource = ""; // имя сервера
                connect1.InitialCatalog = ""; // имя базы данных
                connect1.IntegratedSecurity = true; //проверка подлинности через авторизацию Windows
                string conf_name = "" // название строки подключения из app.config
                ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings[conf_name];
                cs = new ConnectionStringSettings(conf_name, connect1.ConnectionString, "System.Data.SqlClient");
 
            System.Configuration.Configuration config =
                    ConfigurationManager.OpenExeConfiguration(
                    ConfigurationUserLevel.None);
            // Получаем доступ к строкам подключения
            ConnectionStringsSection csSection =
                config.ConnectionStrings;
            // заменяем строку подключения
            csSection.ConnectionStrings.Remove(cs.Name);
            csSection.ConnectionStrings.Add(cs);
            // сохранение файла конфигурации
            config.Save(ConfigurationSaveMode.Modified);
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.07.2016, 03:29
Помогаю со студенческими работами здесь

Изменить строку подключения типизированного DataSet
Создал приложение с типизированным DataSet, который сам сгенерировался с помощью VS2008 и DataSet.xsd. Так вот у этого дата сет есть строка...

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

Изменить строку подключения у ADOConnection
Всем доброго время суток. Хочу программно изменить строку подключения ADOConnection. Вот мой код: with DataModule2.ADOConnection1 do ...

Изменить строку подключения к SOAP сервису
Добрый день. В проект через обозреватель проекта добавлен Web Service (WSDL). В программе, для работы с сервисом путем вызова его...

Программно изменить текущую строку в DataGridView
Привет всем. Такой вопрос. Как программным способом изменить текущую строку в DataGridView? Не выделить, а сделать текущей! Тоесть в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru