У нас есть некоторый устаревший код (на C), служба Windows, которая подключается через драйвер {SQL Server} к базе данных SQL Server. Клиент, который использовал его в течение ряда лет, недавно решил ограничить протоколы на своем сервере в TLS 1.2. Теперь служба не будет подключаться к базе данных.
Попытка изменить диск {SQL Server} на {Драйвер ODBC 17 для SQL Server}, и вызов SQLDriverConnect зависает на неопределенное время. Если бы кто-нибудь мог дать какое-то понимание, мы были бы вечно благодарны.
SQLHENV hEnv = NULL;
SQLHDBC hDbc = NULL;
char inString[512];
char outString[512];
SQLSMALLINT outLength;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
outLength = 512;
memset(outString, 0, 512);
strcpy(inString, "Driver={ODBC Driver 17 for SQL Server};Server=MYSERVER\\MYINSTANCE;Database=MYDB;UID=sa;PWD=MYPASSWORD");
SQLDriverConnect(hDbc, NULL, inString, (SQLSMALLINT)strlen(inString), outString, 512, &outLength, SQL_DRIVER_NOPROMPT);
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);