【问题标题】:C++ SQL Server connection on 64 bit system64 位系统上的 C++ SQL Server 连接
【发布时间】: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 但没有任何改变。

  1. 32 和 64 的连接有什么区别?
  2. 如何调试问题所在?

【问题讨论】:

  • 加载不同库的地方。对于 Visual Studio 64 位编译,它们必须匹配 64 位。
  • Driver={SQL Server} 表示您没有使用下载的驱动程序。首先尝试使用此示例应用程序:docs.microsoft.com/en-us/sql/connect/odbc/…
  • @DavidBrowne-Microsoft 我解决了连接问题。现在我不能包含 ODBC 驱动程序提供的 sqlncli.h 文件。我需要包含这个文件吗?

标签: c++ sql-server odbc


【解决方案1】:

OBDC驱动安装后连接字符串为:

(SQLWCHAR*)L"Driver={ODBC Driver 17 for SQL Server};Server=localhost\\SQLEXPRESS;Database=master;Trusted_Connection=Yes;"

您可以在以下位置找到已安装驱动程序的名称列表:ODBC Data Cource Administrator -> System DSN -> Add...

【讨论】:

    【解决方案2】:

    SQL 状态:IM002:可能的原因

    (DM) 未找到系统信息中数据源规范中列出的驱动程序或由于其他原因无法连接。

    在 32 位和 64 位 Windows 上,默认的 ODBC 管理器工具是 在 c:\Windows\System32\odbcad32.exe 中。但是,在 64 位 Windows 上 机器,默认为64位版本。如果 32 位 ODBC 在 64 位 Windows 系统上需要管理员工具,运行该工具 在这里找到:C:\Windows\SysWOW64\odbcad32.exe

    在 ODBC 管理器工具中检查确切的驱动程序名称。按 Windows 键 + R 然后:

    • C:\Windows\System32\odbcad32.exe 在 32 位系统上
    • C:\Windows\SysWOW64\odbcad32.exe 在 64 位系统上

    What is difference for connection on 32 and 64?

    【讨论】:

    • 您能仔细阅读您的留言吗?我无法理解:如果在 64 位 Windows 系统上需要 32 位 ODBC 管理器工具,请运行此处找到的工具:C:\Windows\SysWOW64\odbcad32.exe 然后 - C:\Windows\SysWOW64\odbcad32。 64位系统上的exe
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2011-05-26
    • 2015-11-15
    • 1970-01-01
    相关资源
    最近更新 更多