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

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

24.09.2014, 22:40. Показов 11207. Ответов 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
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,470
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru