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

Оптимизация подключения

04.06.2015, 17:32. Показов 2468. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет дорогие форумчане.

Работаю в C# с MySQL через коннектор, где можно хранить эти данные и извлекать их по необходимости, да бы при изменении IP адресса не нужно было лезть в код и исправлять.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2015, 17:32
Ответы с готовыми решениями:

Последовательные include - оптимизация подключения библиотек
1) Я не хочу чтобы в коде было что-то лишнее, что в итоге мне не понадобится. Есть ли смысл, ради оптимизации, делать так? ...

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии "оптимизатора" в какой то умной книжке был создан миф. Это миф о цветовой индефикации...

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона для функции 2*X12 - X1*X2 + 3*X22 -...

14
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
04.06.2015, 18:12
Лучший ответ Сообщение было отмечено Rinat73 как решение

Решение

Rinat73, в случае несекретной информации для этого хорошо подходят файлы конфигурации: app.config для значений которые не будут меняться пользователем и конфигурация приложения сохраняемая в профиле пользователя для изменяемой информации. Насколько я понимаю у тебя вариант №1. Добавь в проект файл app.config и добавь внутри элемента configuration:
XML
1
2
3
<connectionStrings>
  <add name="mysql" connectionString= "datasource=localhost; port=3306; CharSet=utf8;" />
</connectionStrings>
Рекомендую использовать именно connectionStrings, а не appSettings т.к. строка соединения хранится целиком давая возможность добавлять произвольные параметры. Например, здесь добавлен параметр CharSet=utf8.
В конструкторе формы или событии Load пишем:
C#
1
2
3
var csBuilder = new MySqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString);
textBoxServer.Text = csBuilder.Server;
textBoxPort.Text = csBuilder.Port.ToString();
В обработчике кнопки "Подключиться" собираем строку соединения:
C#
1
2
3
4
5
6
7
var csBuilder = new MySqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString);
csBuilder.Server = textBoxServer.Text;
csBuilder.Port = uint.Parse(textBoxPort.Text);
csBuilder.UserID = textBoxUserName.Text;
csBuilder.Password = textBoxUserPassword.Text;
    
string connectionString = csBuilder.ConnectionString;
Если необходимо дать возможность менять пользоватею настройки соединения и сохранять их между сеансами, то создай в свойствах проекта параметр с именем mysql и запиши туда строку соединения. Затем измени код инициализации MySqlConnectionStringBuilder:
C#
1
var csBuilder = new MySqlConnectionStringBuilder(Properties.Settings.Default.mysql);
Когда понадодобится изменить строку соединения, то делаем так:
C#
1
2
Properties.Settings.Default.mysql = "новая строка соединения ... ";
Properties.Settings.Default.Save();
1
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 21
04.06.2015, 19:21  [ТС]
OwenGlendower,
Можно ли будет обращаться с каждой формы в app.config чтобы получить строку подключения?

C#
1
MySqlConnection mcon = new MySqlConnection("datasource=localhost;port=3306;username=root;password=");
Не могу понять как оно работает.

======================================== =====================
Теперь работает.
C#
1
2
string connectionString = ConfigurationManager.ConnectionStrings["mysql"].ConnectionString;
MySqlConnection mcon = new MySqlConnection(connectionString);
При этом, пришлось воткнуть в app.config дополнительные параметры, ибо по другому он не читает, странно.
C#
1
2
3
<connectionStrings>
    <add name="mysql" connectionString= "datasource=localhost; port=3306; username=root; password=; CharSet=utf8;" />
  </connectionStrings>
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
04.06.2015, 20:04
Лучший ответ Сообщение было отмечено Rinat73 как решение

Решение

Цитата Сообщение от Rinat73 Посмотреть сообщение
Можно ли будет обращаться с каждой формы в app.config чтобы получить строку подключения?
Можно.

Цитата Сообщение от Rinat73 Посмотреть сообщение
При этом, пришлось воткнуть в app.config дополнительные параметры, ибо по другому он не читает, странно.
Не читает или не хочет поключаться?

Цитата Сообщение от Rinat73 Посмотреть сообщение
connectionString= "datasource=localhost; port=3306; username=root; password=; CharSet=utf8;"
Тебе точно необходимо подключаться к БД как root? Эта учетная запись имеет слишком много привилегий для обычного приложения.
1
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 21
04.06.2015, 20:20  [ТС]
Ну возможно он не читает их, либо не видит.

Я разобрался с app.config только в том, что можно создавать кучу constringov и обращаться к ним из программы в любом месте...

C#
1
2
3
<connectionStrings>
    <add name="mysql" connectionString= "datasource=localhost; port=3306; username=root; password=; CharSet=utf8;" />
  </connectionStrings>
Не понимаю другое, в app.config записаны 2 значения которые содержат в себе server и port.
На рисунке который я предоставил, есть 2 поля из них должны браться значения и пытаться подключиться.

Тогда такой способ берет только из app.config
C#
1
2
string connectionString = ConfigurationManager.ConnectionStrings["mysql"].ConnectionString;
MySqlConnection mcon = new MySqlConnection(connectionString);
Нужно как то добавить 2 значения username and password.

До того, как Вы мне ответили, код выглядел у меня так

C#
1
MySqlConnection mcon = new MySqlConnection("datasource='" + textBoxServer.Text + "';port='" + textBoxPort.Text + "';username='" + textBoxUserName.Text + "';password='" + textBoxUserPassword.Text + "'");
На какой форме я либо не находился я всегда бы пытался брать значения с формы "Подключения к базе данных", но уточнял бы FormLogin.TextBoxServer.text


Сказать насчет root прав, пока еще не разграничивал права доступа, займусь этим в скором.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
04.06.2015, 20:27
Лучший ответ Сообщение было отмечено Rinat73 как решение

Решение

Цитата Сообщение от Rinat73 Посмотреть сообщение
Нужно как то добавить 2 значения username and password.
Я же привел пример в первом ответе:
C#
1
2
3
4
5
6
7
8
9
10
11
// Читаем строку соединения из файла конфигурации и создаем на её основе MySqlConnectionStringBuilder
var csBuilder = new MySqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString);
 
// Подставляем значения которые вводит пользовватель
csBuilder.Server = textBoxServer.Text; // Адрес сервера
csBuilder.Port = uint.Parse(textBoxPort.Text); // Порт
csBuilder.UserID = textBoxUserName.Text; // Логин
csBuilder.Password = textBoxUserPassword.Text; // Пароль
 
// Получаем готовую строку соединения
string connectionString = csBuilder.ConnectionString;
Добавлено через 1 минуту
Цитата Сообщение от Rinat73 Посмотреть сообщение
На какой форме я либо не находился я всегда бы пытался брать значения с формы "Подключения к базе данных", но уточнял бы FormLogin.TextBoxServer.text
Для этого не нужно обращаться к форме. Сделай static класс для хранения глобальной конфигурации.
1
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 21
04.06.2015, 21:12  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Сделай static класс для хранения глобальной конфигурации.
Как его сделать? Все усилия не принесли результата. Помоги пожалуйста.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
04.06.2015, 21:51
Rinat73, самая простая реализация может выглядеть так:
C#
1
2
3
4
static class MyConfiguration
{
    public static string ConnectionString;
}
В обработчике кнопки "Подключиться" строка соединения будет сохраняться:
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
private void ConnectClick(object sender, EventArgs e)
{
    var csBuilder = new MySqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString);
    csBuilder.Server = textBoxServer.Text;
    csBuilder.Port = uint.Parse(textBoxPort.Text);
    csBuilder.UserID = textBoxUserName.Text;
    csBuilder.Password = textBoxUserPassword.Text;
    
    bool successfulConnection = false;
    string connectionString = csBuilder.ConnectionString;
    try
    {
        using (var mysqlConn = new MySqlConnection(connectionString))
        {
            mysqlConn.Open();
            successfulConnection = true;
        }
    }
    catch (MySqlException) { }
    
    if (successfulConnection)
    {
        MyConfiguration.ConnectionString = connectionString;
    }
}
Таким образом в MyConfiguration.ConnectionString будет правильная строка соединения к которой можно будет обращаться из любого места.

Дальше надо расширить класс MyConfiguration чтобы он умел читать и записывать конфигурацию. Это уже самостоятельно делай.
1
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 21
04.06.2015, 23:34  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Таким образом в MyConfiguration.ConnectionString будет правильная строка соединения к которой можно будет обращаться из любого места.
Как бороться?
0
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 21
05.06.2015, 10:45  [ТС]
Плиз.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
05.06.2015, 11:20
Rinat73, добавь в проект класс MyConfiguration.
1
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 21
05.06.2015, 12:29  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Rinat73, добавь в проект класс MyConfiguration.


0
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 21
05.06.2015, 12:32  [ТС]
Код на кнопке где должно запоминать в класс значение. В LogForm

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
36
37
38
39
40
41
42
public void button1_Click(object sender, EventArgs e)
        {
            General f = new General();
            try
            {
                var csBuilder = new MySqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString);
                csBuilder.Server = textBoxServer.Text;
                csBuilder.Port = uint.Parse(textBoxPort.Text);
                csBuilder.UserID = textBox1.Text;
                csBuilder.Password = textBox2.Text;
 
                bool successfulConnection = false;
                string connectionString = csBuilder.ConnectionString;
                try
                {
                    using (var mysqlConn = new MySqlConnection(connectionString))
                    {
                        mysqlConn.Open();
                        successfulConnection = true;
                    }
                }
                catch (MySqlException) { }
 
                if (successfulConnection)
                {
                    MyConfiguration.ConnectionString = connectionString;
                }  
                
                
                  //MySqlConnection mcon = new MySqlConnection("datasource='" + textBoxServer.Text + "';port='" + textBoxPort.Text + "';username='" + textBox1.Text + "';password='" + textBox2.Text + "'");
                MySqlConnection mcon = new MySqlConnection(connectionString);  
                mcon.Open();
                  f.Show();
                  this.Hide();
              
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
 
        }
0
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 21
05.06.2015, 12:37  [ТС]


Сразу видно не передается почему то , значения, оно пустое якобы.
0
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 21
05.06.2015, 12:44  [ТС]
Все теперь передается MyConfiguration, оказывается я вставил в LogForm описание класса, а нужно было его в отдельный файл и он конфликтил с ним.
Теперь наследование работает, на всех формах обращаться можно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2015, 12:44
Помогаю со студенческими работами здесь

Настройка сетевого подключения по умолчанию в rashbian для подключения к сети интернет
Всем здравствуйте! На orange PI zero поднял ОС rashbian с необходимым ПО. Всё работает как надо. Но есть проблемка! Нужно...

Какое нужно оборудование для подключения вай фай, а также каковы условия самого подключения
Прошу прощения за столь глупый вопрос, но я в этом деле полный нуб, а где ещё можно спросить больше не знаю. Дело вот в чём. У меня...

В папке "Сетевые подключения" пусто, подключения к интернету нет, но нельзя войти в настройки адаптера
В папке &quot;Сетевые подключения&quot; - пусто. К интернету подключение есть но не получается войти в настройки адаптера :( вроде...

Пропало окошко "Состояние подключения (имя подключения)" при подключении к интернету
Всем привет вопрос в теме)

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru