Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97

Строку подключения к SQL брать из .config файла

21.02.2021, 14:39. Показов 7165. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите пожалуйста, как можно в коде прописать строку подключения, которая указана в файле .config?
На данный момент строка подключения вшита в код, и для того, чтобы программу можно было использовать на разных серверах приходиться менять строку в коде.
Хочу сделать так, чтобы можно было поменять подключение в файле, а программа считывала его.
Сейчас реализовано так:
Объявил строку в класс
C#
1
2
3
4
 static class Settings
        {
            public const string connection_string = "Data Source=DESKTOP-JHRURJJ(SQLEXPRESS);Initial Catalog=Detrop;Integrated Security=SSPI";
        }
и при обращении беру строку оттуда
C#
1
using (SqlConnection conn = new SqlConnection(Settings.connection_string))
Добавлено через 39 минут
Файл конфигурации есть, но он не используется.
Выглядит так:
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="Connector"
            connectionString="Data Source=localhost;Initial Catalog=Detrop;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>
Подскажите пожалуйста на примере, как реализовать обращение к файлу и считывать строку подключения?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.02.2021, 14:39
Ответы с готовыми решениями:

Получить строку подключения из App.config
Знает кто-нибудь как это делается в 4-ом фрэймворке? В какой-то ранней версии делается так: string connectionString = ...

Как получить строку подключения из app.config?
Пытаюсь получить строку подключения, код простой и в docs.microsoft.com описанный: string conStr =...

Файл .config как спрятать строку подключения?
В программе строка подключения была прописана в каждой форме, после совета на одном из форумов я запихнул ее в App.config и теперь это...

45
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
21.02.2021, 20:47  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от MsGuns Посмотреть сообщение
Это не 2 инстанса, а 2 разных сервера
Нет. Сервер один, на нем может быть установлено несколько ядер sql.
У меня к примеру 2.
Миниатюры
Строку подключения к SQL брать из .config файла  
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
21.02.2021, 20:47
Цитата Сообщение от detrop Посмотреть сообщение
MsGuns, я могу скинуть вам программу и базу, вы базу прикрепите к sql, но при запуске она не подключиться,
Опять ерунду городите. "Базы" не "ездят" файлами (точнее, не нужно так делать) и тем более connectionstring`ми. Чтобы перевезти базу с одного сервера на другой работают с копированием - восстановлением (backup/restore).

Вам просто нужно попрактиковаться
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
21.02.2021, 20:51  [ТС]
MsGuns, почему ерунду?
Как вы себе представляете создание базы на организации?
Т.е. если только пользуясь backup/restore это значит мне нужно создать там пустую базу и выполнить restore?
Не проще ли .mdf файл базы подложить и выполнить Attach?
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
21.02.2021, 20:51
Цитата Сообщение от detrop Посмотреть сообщение
Нет. Сервер один, на нем может быть установлено несколько ядер sql.
Да что Вы говорите ? Список на правой панели (запущенные процессы) ни о чем Вам не говорит ?
"Сервер" у вас один. В смысле ПК. А "SQL-Server" у Вас два. Один Local(Express), а второй, возможно Enterprise. Почувствуйте разницу
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
21.02.2021, 20:53  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
А "SQL-Server" у Вас два
Хорошо, пусть будет так, сути это не меняет.
Изначальный вопрос, как сделать так, чтобы программа считывала "сервер" из app.config?
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
21.02.2021, 20:58
Цитата Сообщение от detrop Посмотреть сообщение
Т.е. если только пользуясь backup/restore это значит мне нужно создать там пустую базу и выполнить restore?
Не проще ли .mdf файл базы подложить и выполнить Attach?
Ухо можно чесать по-разному. Рукой, ногой, шваброй, гранатометом. Вы хотите чесать пяткой Вашей девушки - на здоровье.
Вместо того, что просто найти в инете простые и надежные способы. Главное - результат. Абсолютно не влияющий на сценарий настройки Вашего приложения.

Или Вы хотите с установкой приложения устанавливать и БД ?

Что Вы хотите сделать ?

Добавлено через 3 минуты
Цитата Сообщение от detrop Посмотреть сообщение
Хорошо, пусть будет так, сути это не меняет.
Меняет абсолютно. Т.к. это два разных предмета. В общем случае никак друг от друга не зависимых.
Цитата Сообщение от detrop Посмотреть сообщение
Изначальный вопрос, как сделать так, чтобы программа считывала "сервер" из app.config?
Вы же нашли способ. Вас же интересует наоборот - чтобы программа писала в этот конфиг что нужно при установке ?
Или Вы ручками туда пишете строку ?

У меня уже мозги плавятся с Вами
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
21.02.2021, 21:00  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Что Вы хотите сделать ?
Да, вместе с программой на сервера будет устанавливаться настроенная бд.
Объясняю наверно раз восьмой, чего я хочу.

Имеется строка подключения:
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="Connector"
            connectionString="Data Source=localhost;Initial Catalog=Detrop;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>
НО в ней не указывается сервер (или инстанс). Мне нужно его указывать и чтобы код программы во время коннекта обращался к нему.

Добавлено через 1 минуту
Цитата Сообщение от MsGuns Посмотреть сообщение
У меня уже мозги плавятся с Вами
Мой вопрос был изначально прост. Я просто не знаю как его реализовать.
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
21.02.2021, 21:07  [ТС]
Вот пример другой программы, которая имеет программу настройки подключения.
Тут изображено, что выбирается адрес или имя сервера и после слеша задается серер (инстанс, экземпляр (SQLEXPRESS))
Миниатюры
Строку подключения к SQL брать из .config файла  
0
 Аватар для IamRain
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
22.02.2021, 08:25
detrop, решение с чтением конфига через ConfigurationManager разве не рабочее?

Добавлено через 12 минут
Адрес инстанса указывается в атрибуте Data Source строки подключения:
XML
1
Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;Password=myPassword;
Либо через IP адрес и порт:
XML
1
Data Source=190.190.200.100,1433; Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
22.02.2021, 09:01  [ТС]
IamRain, рабочее, я сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 static class AppConfig
        {
            private static string _connectionString;
            public static string ConnectionString
            {
                get
                {
                    if (_connectionString == null)
                    {
                        string configConnectionString = ConfigurationManager.ConnectionStrings["Connector"].ConnectionString;
                        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(configConnectionString);
                        //builder.DataSource = Environment.MachineName; //+ "\\MSSQLSERVER";
                        _connectionString = builder.ConnectionString;
                    }
                    return _connectionString;
                }
            }
        }
Как видно я убрал строку //builder.DataSource = Environment.MachineName; //+ "\\MSSQLSERVER";
Потому что Имя сервера берется из файла, но экземпляр sql сервера не считывается.
Моя задача теперь сделать так, чтобы экземпляр тоже считывался из файла, но чтобы я туда не указывал - подключение не происходит. Пробовал разные варианты написания:
connectionString="Server=DESKTOP-2J8JPAC/MSSQLEXPRESS;
connectionString="Server=(DESKTOP-2J8JPAC)/MSSQLEXPRESS;
connectionString="Server=DESKTOP-2J8JPAC\MSSQLEXPRESS; и т.п.

Добавлено через 3 минуты
Почему я не могу оставить builder.DataSource = Environment.MachineName + "\\MSSQLSERVER";
Потому что это привяжет программу к имени сервера и к экземпляру MSSQLSERVER.
В таком случае при подключении она ВСЕГДА будет стучаться к данному экземпляру и к серверу, имя которого в Environment.MachineName.
А нужно, чтобы стучался в указываемый МНОЙ сервер и указываемый экземпляр.
0
 Аватар для IamRain
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
22.02.2021, 09:13
Цитата Сообщение от detrop Посмотреть сообщение
я сделал так:
C#
1
 SqlConnectionStringBuilder builder =...
Вам не нужно ничего билдить, она у вас уже в готовом виде из конфига достается, то есть 10-ой строки уже вполне достаточно.

Цитата Сообщение от detrop Посмотреть сообщение
Моя задача теперь сделать так, чтобы экземпляр тоже считывался из файла,
Строка подключения - это все что нужно для установки подключения к инстансу СУБД. Не надо ничего билдить, ё-мое.

Просто вот так:
C#
1
2
3
string configConnectionString = ConfigurationManager.ConnectionStrings["Connector"].ConnectionString;
using var connectoin = new SqlConnection(configConnectionString);
// далее делаете что вашей душе угодно с этим SqlConnection
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
22.02.2021, 17:48
IamRain, Фишка в том, что на каждом ПК, где устанавливается прога, свой SQL-сервер. То ли сетевой, то ли локальный (то ли его вообще нетути) - автор умалчивает.
И хочет написать некий код, который сам или с его помощью найдет нужный SQL-сервер, установит на него базу и впишет строку соединения в конфиг.
Идея сама себе инвалидная, реализация, как видим, тоже

Добавлено через 10 минут
Ему уже был предложен вариант установочной программы, которая включается в install-пакет.
Эта программа работает так:
1. Проверяет была ли уже установка ранее по сеттингам ? Если была вытаскивает из сеттингов строку соединения и проверяет есть ли в наличие SQL-server и нужная база на нем. Если все ок, то ничего не делает.
2. Если не было установки (сеттингов нет на ПК), ищет доступные SQL-сервера и предлагает выбрать нужный.
3. После выбора SQL-сервера проверяется есть ли на нем нужная БД и, если нет, предлагает ее создать и засунуть туда содержимое, взятое откуда-то, например из файла mdf, прилепленного в тот же install.
4. Когда все выбрано, база создана (или приаттачена, как желает ТС, хотя это неправильно), то создается сеттинг и в него суется строка кроме всего прочего соединения.
5. Основное приложение лезет в сеттинг, вытаскивает оттуда строку соединения, пихает ее в конфиг и далее по тексту
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
22.02.2021, 22:44  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Фишка в том, что на каждом ПК, где устанавливается прога, свой SQL-сервер. То ли сетевой, то ли локальный (то ли его вообще нетути) - автор умалчивает.
Я несколько раз описал в каком режиме будет использоваться программа. Складывается ощущение, что вы или игнорите мои сообщения или вырываете фразы из контекста.
Я сказал, что программа может установиться на ЛЮБОЙ ПК в сети, обращаться к сервер, где находится бд она будет через строку подключения в .config файле. Для изменения сервера, к которому будет подключаться программа нужно изменить адрес и инстанс сервера в вышеописанном файле.
Неужели я так сложно объясняю?
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
22.02.2021, 23:36
Цитата Сообщение от detrop Посмотреть сообщение
Для изменения сервера, к которому будет подключаться программа нужно изменить адрес и инстанс сервера в вышеописанном файле.
Цитата Сообщение от detrop Посмотреть сообщение
Да, вместе с программой на сервера будет устанавливаться настроенная бд.
Как эти два Ваши изречения согласуются между собою ?

Если одна "организация". В ней есть N ПК и SQL-сервер. Один на всех.
При установке приложения на ПК 1 устанавливается БД.
При установке приложения на ПК 2 устанавливается БД опять ? Поверх уже установленной ?
А если между этими событиями пользователь ПК1 уже чего-то в базу внес ?

Вы сами не можете разобраться что Вам нужно. Пишете, что Вас не могут понять ? А Вы сами себя понимаете ?
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
23.02.2021, 08:35  [ТС]
MsGuns, еще раз:
Цитата Сообщение от MsGuns Посмотреть сообщение
Если одна "организация". В ней есть N ПК и SQL-сервер. Один на всех.
При установке приложения на ПК 1 устанавливается БД.
Верно. 1 ПК - сервер, остальные ПК - клиенты.
Цитата Сообщение от MsGuns Посмотреть сообщение
При установке приложения на ПК 2 устанавливается БД опять ? Поверх уже установленной ?
Зачем? С чего вы взяли? ПК 2 - это уже клиент, на него БД не ставится. На нем разворачивается программа и в .config файле прописывается строка подключения к ПК 1, т.е. к серверу с БД.
Цитата Сообщение от MsGuns Посмотреть сообщение
А если между этими событиями пользователь ПК1 уже чего-то в базу внес ?
Значит клиент увидит изменения в БД, подключившись программой к серверу с базой.
Цитата Сообщение от MsGuns Посмотреть сообщение
Вы сами не можете разобраться что Вам нужно. Пишете, что Вас не могут понять ? А Вы сами себя понимаете ?
Я прекрасно понимаю чего я хочу, прошу читать внимательнее.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
23.02.2021, 10:02
detrop, строка подключения для всех клиентов одинаковая. Если сервер переедет на другой ip, она изменится, но по-прежнему будет одинаковой для всех клиентов. Так что вам нужно сделать инсталлятор с конфиг-файлом, где будет строка подключения. При изменении строки подключения вы вносите изменения в конфиг-файл и отдаете инсталлятор пользователям для переустановки программы.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
23.02.2021, 12:31
detrop, Что Вы понимаете под "установкой приложения" и "установкой базы" ? Это все в одном" стакане" или в разных ? Ну и в [36] Вам написали то же, что было уже надцать раз сказано в этой ветке.
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
23.02.2021, 14:50  [ТС]
Я тоже уже надцать раз объяснял как все должно быть.
Изначальную проблему решил, я просто некорректно указывал инстанс, слеш писал не в ту сторону.
Все ответы по теме учел, всем спасибо!
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
24.02.2021, 07:55
detrop, итоговое решение какое все-таки ?
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
24.02.2021, 09:36  [ТС]
Почтальон, Код подключения у меня выглядит так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static class AppConfig
        {
            private static string _connectionString;
            public static string ConnectionString
            {
                get
                {
                    if (_connectionString == null)
                    {
                        string configConnectionString = ConfigurationManager.ConnectionStrings["Connector"].ConnectionString;
                        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(configConnectionString);
                        _connectionString = builder.ConnectionString;
                    }
                    return _connectionString;
                }
            }
        }
Т.е. данные подключения берутся из .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="Connector"
            connectionString="Data Source=DESKTOP-2J8JPAC\SQLEXPRESS2014;Initial Catalog=detropTest;Integrated Security=false; User id=sa; Password=Intellect_default_DB_4"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>
Проблема состояла в том, что я указывал слеш не в ту сторону, я писал "/" а нужно было в другую сторону (форум не дает вставить корректный слеш\).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2021, 09:36

Где располагается app.config, содержащий строку подключения
Помогите!!! Если у меня решение состоит из консольного проекта и dll, отвечающей за соединение с БД в разных директориях. Где должен...

Создать App.Config для хранения данных для подключения к MS SQL серверу-DataSource и InitialCatalog
Не работал не разу с файлами конфигурации. Нужно сделать следующий файл: В нем будут содержать данные для подключения к MS SQL...

SQL: получить строку подключения
Есть SQL Express. Надо получить connectionstring, конкретнее Data Source, Integrated Security? A AttachDbFilenameдумаю находить в ручную...

Не видит строку подключения к SQL server
Всем приветик! Дома делала лабораторку по ASp.Net. Простенький сайт с полями для регистрации нового студента. Заполняем Имя, Фамилию,...

брать строку не из файла а передать параметром в .exe
Есть нужный мне код, программа читает исходный текст из файла .txt и шифрует мне нужно переделать ( есть исходник ) так чтобы string...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru