首页 > 解决方案 > 当客户端限制为 TLS 1.2 时 SQLDriverConnect 挂起

问题描述

我们有一些遗留代码(C 语言),一个通过 {SQL Server} 驱动程序连接到 SQL Server 数据库的 Windows 服务。使用了多年的客户端最近决定将其服务器上的协议限制在 TLS 1.2 上。现在该服务将无法连接到数据库。

尝试将 {SQL Server} 驱动器更改为 {ODBC Driver 17 for 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);

标签: csql-serverodbctls1.2

解决方案


推荐阅读