Вопрос по работе с базами данных через C# сниппеты.

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18
Доброго времени суток.

Почитал немного документацию (несколько куцая она и без нормальных примеров) и исходя из ее данных при использовании ZennoPoster.Db, я постоянно открываю соединение с mySql или любой другой базой данных по новой, что дает мне при частом использовании БД кучу открытых соединений, это если я правильно понял.

Прошу помощи если кто работал с данным классом в зенно, если можете объяснить как с ним взаимодействовать.

Если не рекомендуете по опыту то просто скажите чтобы я бросил это дело и подключил библиотеки из VisualStudio для работы с mySql и не парился, хотя я не добавлял другие библиотеки в зенно еще ни разу потому тут тоже прошу совета.

Я не сильно опытен в работе с базами данных, не судите строго.

Скрин набора базовых функций для взаимодействия с БД:
 
Последнее редактирование:

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18
Добавил скрин доступных в сниппете функций и там нет открытия или закрытия соединения, по сути когда ты делаешь запрос к базе данных там строкой:
Код:
var count = ZennoPoster.Db.ExecuteScalar("SELECT COUNT(*) FROM User", null,
  ZennoLab.InterfacesLibrary.Enums.Db.DbProvider.SqlClient,
    "Data Source=SQLSERVER;Initial Catalog=TestDb;Integrated Security=True;max pool size=500");
ты сразу открывашь соединение но закрыть его нельзя, (по умолчанию mySql держит соединение 8 часов после открытия и соответственно это дико загрузит комп если часто выполнять). Но хз может я что то не правильно понял.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
по умолчанию mySql держит соединение 8 часов после открытия и соответственно это дико загрузит комп если часто выполнять
Возможно в настройках MySQL можно изменить таймаут?
 

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18
Возможно в настройках MySQL можно изменить таймаут?
В моем случае это не решит проблему так как мне надо делать около 10к-10кк обращений к базе данных за одно выполнение шаблона, это дохерищи соединений они мне проц с оперативой перегрузят быстрее чем я скажу "ох"
 

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18
Пришел к выводу что добавлю библиотеки .NET mySql-connector и не буду парится. Открываешь соединение когда запускаешь шаб через CommonCode потом закрываешь, делаешь для этого по сути просто 2 void функции одной открываем соединение в начале шаба, второй закрываем ссылка на скачивание .NET библиотеки: https://dev.mysql.com/downloads/connector/net/8.0.html
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Пришел к выводу что добавлю библиотеки .NET mySql-connector и не буду парится. Открываешь соединение когда запускаешь шаб через CommonCode потом закрываешь, делаешь для этого по сути просто 2 void функции одной открываем соединение в начале шаба, второй закрываем ссылка на скачивание .NET библиотеки: https://dev.mysql.com/downloads/connector/net/8.0.html
И нахера столько раз закрывать?
Один раз открыл и работай до посинения. Вообще можно не делая запросов в коде c# обновлять прототип БД, а потом один раз запустить функцию Update и таким образом одним запросом обновить всю БД до нужного состояния
 
  • Спасибо
Реакции: Nike59

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18
И нахера столько раз закрывать?
Один раз открыл и работай до посинения. Вообще можно не делая запросов в коде c# обновлять прототип БД, а потом один раз запустить функцию Update и таким образом одним запросом обновить всю БД до нужного состояния
Да суть в том что я думал стандартным методом зенно работать, а у меня частые обращения к БД, и если использовать стандартный метод из зенно то получится, что кучу раз открываю новые соединения с БД (стандартный метод так работает если я правильно понял), а так то да я так и хочу один раз открыл и все.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 103
Благодарностей
132
Баллы
63
Почитал немного документацию (несколько куцая она и без нормальных примеров) и исходя из ее данных при использовании ZennoPoster.Db, я постоянно открываю соединение с mySql или любой другой базой данных по новой, что дает мне при частом использовании БД кучу открытых соединений, это если я правильно понял.
Может кто-то из официальных поддержек это подтвердит или опровергнет, уже были подобные вопросы.
 

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18

Veterinar

Client
Регистрация
01.07.2016
Сообщения
194
Благодарностей
22
Баллы
18
Проблема решена, путем проведения тестов, сделал петлю и проверил как именно система реагирует.
Если кому интересно.

В общем стандартное взаимодействие Zenno с базой данных работает по такому принципу:
Код:
conn.Open();

// Делаем наш запрос

conn.Close();
то есть для каждого запроса идет открытие соединения и по его завершению сразу идет закрытие.
Например если мы используем петлю foreach со списком в 200 элементов то мы получим 200 открытий и закрытий соединения.
По моим тестам это не сказывается катастрофически на производительности. Хотя Проц немного тужился но не сильно, тесты делал на древнем Athlon так что современные машины даже не заметят.

Если кому интересно вот сама строка взаимодействия с MySqL (скалярный запрос) с другими типами баз данных по сути тоже самое:
Код:
ZennoPoster.Db.ExecuteScalar("SELECT COUNT(*) FROM clist WHERE (finished = @UserId)", new System.Collections.Specialized.OrderedDictionary {{"@UserId", "Наша строка"}}, ZennoLab.InterfacesLibrary.Enums.Db.DbProvider.MySqlClient, "server=127.0.0.1;user id=root;password=root;persistsecurityinfo=True;database=checklist");
Спасибо всем кто помогал удачной вам работы.

На случай если ищете инфу в документации Zenno по C# то используйте "DB" в поиске.
 
  • Спасибо
Реакции: ttimbaland1983

prodox

Client
Регистрация
28.08.2018
Сообщения
280
Благодарностей
55
Баллы
28
Проблема решена, путем проведения тестов, сделал петлю и проверил как именно система реагирует.
Если кому интересно.

В общем стандартное взаимодействие Zenno с базой данных работает по такому принципу:
Код:
conn.Open();

// Делаем наш запрос

conn.Close();
то есть для каждого запроса идет открытие соединения и по его завершению сразу идет закрытие.
Например если мы используем петлю foreach со списком в 200 элементов то мы получим 200 открытий и закрытий соединения.
По моим тестам это не сказывается катастрофически на производительности. Хотя Проц немного тужился но не сильно, тесты делал на древнем Athlon так что современные машины даже не заметят.

Если кому интересно вот сама строка взаимодействия с MySqL (скалярный запрос) с другими типами баз данных по сути тоже самое:
Код:
ZennoPoster.Db.ExecuteScalar("SELECT COUNT(*) FROM clist WHERE (finished = @UserId)", new System.Collections.Specialized.OrderedDictionary {{"@UserId", "Наша строка"}}, ZennoLab.InterfacesLibrary.Enums.Db.DbProvider.MySqlClient, "server=127.0.0.1;user id=root;password=root;persistsecurityinfo=True;database=checklist");
Спасибо всем кто помогал удачной вам работы.

На случай если ищете инфу в документации Zenno по C# то используйте "DB" в поиске.

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

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)