3

我正在尝试从新创建的 C++ 应用程序连接到本地 SQL Server 2008 实例。我还在学习 C++,所以我可能会遗漏一些明显的东西。

我正在使用 Microsoft Visual Studio 2010,将 Win32 控制台应用程序创建为空白项目并自己添加 main.cpp。

SQL Server 实例已启动并正在运行,我可以使用 SQL 或集成身份验证从其他机器连接到它,我什至可以让我的 C# 应用程序使用 .net 对象进行连接。

但是在 C++ 中,我无法建立连接,它总是报告失败。

到目前为止,我的代码如下

#include <iostream>
#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>

int main() {

    SQLHENV env;
    SQLHDBC dbc;
    SQLHSTMT stmt;
    SQLRETURN ret;
    SQLSMALLINT columns; 
    int row = 0;

    /* Allocate an environment handle */
    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
    /* We want ODBC 3 support */
    SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
    /* Allocate a connection handle */
    SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

    /* Connect to the DSN */
    SQLDriverConnectW(dbc, NULL, L"DRIVER={SQL Server};SERVER=(local)\DB1;DATABASE=master;UID=sa;PWD=password;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

    /* Check for success */
    if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt))
    {
        std::cout << "Failed to connect";
    }

    std::cin.get();
    return 0;
}

我基于看到一些在线示例,例如http://www.easysoft.com/developer/languages/c/odbc_tutorial.html

始终,即使使用有效凭据,我的代码也会进入无法连接块。并尝试使用上面链接文章中的 extract_error ,根本不会产生任何错误消息。

请问我在这里做错了什么?谢谢

4

1 回答 1

5

从评论重新发布,以便可以关闭问题:

  • (SQLWCHAR*)是一个明显的错误。而是尝试L使您的字符串文字成为字符串文字。

  • 默认连接超时为 60 秒,因此您可能会遇到这种情况。检查您的 SQL 协议设置,如果它配置为在本地使用 TCP,请同时检查您的防火墙设置。

于 2012-07-17T20:30:17.143 回答