【发布时间】:2021-02-01 18:14:33
【问题描述】:
这是我将本地 SQL Server 与 Visual Studio 2019 连接的代码。
SQLHANDLE sqlConnHandle = nullptr;
SQLHANDLE sqlStmtHandle = nullptr;
SQLHANDLE sqlEnvHandle = nullptr;
SQLRETURN error = 0;
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlEnvHandle))
std::cout << "SQLAllocHandle() sqlEnvHandle error" << std::endl;
if (SQL_SUCCESS != SQLSetEnvAttr(sqlEnvHandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0))
std::cout << "SQLSetEnvAttr() sqlEnvHandle error" << std::endl;
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC, sqlEnvHandle, &sqlConnHandle))
std::cout << "SQLSetEnvAttr() sqlConnHandle error" << std::endl;
std::cout << "Connecting..." << std::endl;
error = SQLDriverConnect(
sqlConnHandle,
NULL,
(SQLWCHAR*)L"Driver={SQL Server};Server=localhost\\SQLEXPRESS;Database=master;Trusted_Connection=Yes;",
SQL_NTS,
NULL,
NULL,
NULL,
SQL_DRIVER_NOPROMPT
);
它在 32 位系统上运行良好。
当我切换到 64 位时,SQLDriverConnect() 期间出现错误:
- SQL 状态:IM002
- 错误代码:0
使用SQLGetDiagRec()获取;
我从这个页面安装了 64 位版本的 ODBC 驱动程序: https://docs.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver15#download-for-windows 但没有任何改变。
- 32 和 64 的连接有什么区别?
- 如何调试问题所在?
【问题讨论】:
-
加载不同库的地方。对于 Visual Studio 64 位编译,它们必须匹配 64 位。
-
Driver={SQL Server}表示您没有使用下载的驱动程序。首先尝试使用此示例应用程序:docs.microsoft.com/en-us/sql/connect/odbc/… -
@DavidBrowne-Microsoft 我解决了连接问题。现在我不能包含 ODBC 驱动程序提供的 sqlncli.h 文件。我需要包含这个文件吗?
标签: c++ sql-server odbc