Я использую библиотеку OTLv4 для подключения к базе данных MS SQL и сохранения данных. Некоторые функции вызываются каждые несколько секунд, а другие запускаются из внешнего источника (для создания sh пула соединений и выполнения запросов / нескольких запросов). В целом, это довольно надежно, но каждые несколько дней я сталкиваюсь с cra sh во время открытия пула соединений. А затем я получаю сообщение об ошибке, например:
[Microsoft] [ODB C Драйвер 11 для SQL Сервер] Клиент не может установить соединение sh, поскольку во время рукопожатия произошла ошибка авторизоваться. Распространенные причины включают в себя попытку клиента подключиться к неподдерживаемой версии сервера SQL, слишком занятый сервер для приема новых подключений или ограничение ресурсов (память или максимально допустимые подключения) на сервере.
Код для открытый пул соединений в конструкторе:
Connection::Connection(char* funName)
{
Dbg d("Connection::Connection");
d << "Constructor " << funName << info();
d << "Open connection pool to MS Sql: " << info();
try
{
connectionPool.open("furl2user/furl2user@FURN", false, 1, 300, 1);
}
catch (otl_exception& p)
{
d << p.msg; d.fatal();
d << p.stm_text; d.fatal();
d << p.var_info; d.fatal();
return;
}
d << "ConnPool opened" << info();
}
Пример запроса (функций в этой программе может быть довольно много):
otl_stream stream(1, "update MIL_LV2_DCH set Status = :status<int>, prs_tim = :prs_datetime<timestamp> where Status = :stat<int> and Slab_id = :slab<char[32]>", *connectionPtr);
stream << 1 << getDateTime() << 0 << c;
stream.flush();
stream.close();
Деструктор:
Connection::~Connection()
{
Dbg d("Connection::~Connection");
d << "Destructor" << info();
connectionPool.close();
d << "ConnPool closed" << info();
}