powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как лучше организовать Connect/Disconnect
7 сообщений из 7, страница 1 из 1
Как лучше организовать Connect/Disconnect
    #34314921
OIO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OIO
Гость
Здравствуйте!
У меня в приложении имеет место быть частое обращение к БД, выборка от туда определенных данных. Для соединения у меня написана такая функция
Код: plaintext
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.
int Connection(idbSes *Ss, char *SName, char *uid, char *psw)
{
	SQLHENV *hEnv = &Ss->hEnv;
	SQLHDBC *hDBC = &Ss->hDBC;
	RETCODE rc;

	// Allocates environment 
	rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, hEnv);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return IDB_CON_FAIL;
	
	// Sets environmental attributes
	rc = SQLSetEnvAttr(*hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,  0 );
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) 
        {
                   SQLFreeHandle(SQL_HANDLE_ENV, *hEnv);
                   return IDB_CON_FAIL;
        }
	
	// Allocates space for connection
	rc = SQLAllocHandle(SQL_HANDLE_DBC, *hEnv, hDBC);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
        {
	         SQLFreeHandle(SQL_HANDLE_ENV, *hEnv);	
	         return IDB_CON_FAIL;
        }

	// Set login timeout as 5 seconds
	SQLSetConnectAttr(hDBC, SQL_ATTR_CONNECTION_TIMEOUT, (void *) 5 ,  0 );
	SQLSetConnectAttr(hDBC, SQL_ATTR_LOGIN_TIMEOUT, (void *) 5 ,  0 );
	
	// Connection
	rc = SQLConnect( *hDBC, (SQLCHAR *)SName, strlen (SName), (SQLCHAR *)uid, strlen (uid), (SQLCHAR *)psw, strlen (psw));

	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
	{
		SQLFreeHandle(SQL_HANDLE_DBC, *hDBC);
		SQLFreeHandle(SQL_HANDLE_ENV, *hEnv);	
		return IDB_CON_FAIL;
	}

	return IDB_OK;
}
И функция для дисконнекта:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
int Disconnection (idbSes *Ss)
{
	SQLHENV *hEnv = &Ss->hEnv;
	SQLHDBC *hDBC = &Ss->hDBC;
	RETCODE rc;

	rc = SQLDisconnect(*hDBC);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return IDB_DISCON_FAIL;

	rc = SQLFreeHandle(SQL_HANDLE_DBC, *hDBC);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return IDB_DISCON_FAIL;

	rc = SQLFreeHandle(SQL_HANDLE_ENV, *hEnv);
	if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) return IDB_DISCON_FAIL;

	return IDB_OK;	
}
Ну, примерно так.
Так вот вопрос в следующем: как лучше организовать Connect/Disconnect, перед каждым обращением к БД коннектиться, а потом разрывать соединение, или при старте приложения приконнектиться, а дисконнектиться уже при выходе?
...
Рейтинг: 0 / 0
Как лучше организовать Connect/Disconnect
    #34315113
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один коннект, одна грязная транзакция.
...
Рейтинг: 0 / 0
Как лучше организовать Connect/Disconnect
    #34315128
OIO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OIO
Гость
Не совсем понял, что значит грязная транзакция. И чем это чревато.
...
Рейтинг: 0 / 0
Как лучше организовать Connect/Disconnect
    #34315806
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OIOперед каждым обращением к БД коннектиться, а потом разрывать соединение, или при старте приложения приконнектиться, а дисконнектиться уже при выходе?
Какая цена вопроса???

Если у тебя интенсивная работа с базой - каждый коннект/дисконнект + проверка прав выльется в заметные накладные расходы, например обработка платежей населения за ЖКХ.
Иначе незачем держать коннект, если работа с базой от случая к случаю, например, через internet юзер хочет узнать расписание самолётов/поездов. Получил и отвалил изучать его.
...
Рейтинг: 0 / 0
Как лучше организовать Connect/Disconnect
    #34316041
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OIOНе совсем понял, что значит грязная транзакция. И чем это чревато.

Тема для какого-нибудь форума по работе с базами данных.

dirty в fbclient
isc_tpb_read_committed Высокопроизводительная конкурирующая транзакция, которая может читать изменения, подтверждённые другими конкурирующими транзакциями. Использование этого параметра предоставляет все преимущества многоверсионной модели транзакции InterBase.
isc_tpb_rec_version Позволяет транзакции с параметром isc_tpb_read_committed читать наиболее свежую подтверждённую версию записи, даже если не существуют другие неподтверждённые версии.


но это все так - примерно.

Я бы тебе посоветовал хорошенько описать временную схему работы твоего приложения: частота запросов, важность достоверности данных, режим работы. А после этого отправить этот вопрос в форум по БД.
...
Рейтинг: 0 / 0
Как лучше организовать Connect/Disconnect
    #34316537
--ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zmeishe OIOперед каждым обращением к БД коннектиться, а потом разрывать соединение, или при старте приложения приконнектиться, а дисконнектиться уже при выходе?
Какая цена вопроса???

Если у тебя интенсивная работа с базой - каждый коннект/дисконнект + проверка прав выльется в заметные накладные расходы, например обработка платежей населения за ЖКХ.
Иначе незачем держать коннект, если работа с базой от случая к случаю, например, через internet юзер хочет узнать расписание самолётов/поездов. Получил и отвалил изучать его.

Connection pooling является компромиссом
...
Рейтинг: 0 / 0
Как лучше организовать Connect/Disconnect
    #34317450
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OIO пишет:
> Так вот вопрос в следующем: как лучше организовать Connect/Disconnect,

Вот так вот:
> или при старте приложения приконнектиться, а дисконнектиться уже при выходе?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как лучше организовать Connect/Disconnect
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]