视觉工作室-SQLDriverConnect失败(返回SQL_ERROR)

时间:2020-09-12 20:01:13

标签: c++ sql c visual-studio odbc


我正在尝试连接到我从C ++中的Visual Studio 2017在SQL Server Management Studio中创建的数据库,但是函数SQLDriverConnect无法连接,由于某些原因它失败并返回SQL_ERROR。
这是我正在使用的代码:(我是从互联网上获得的,并且在许多其他网站上也看到了)

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

using namespace std;

void showSQLError(unsigned int handleType, const SQLHANDLE& handle)
{
    SQLCHAR SQLState[1024];
    SQLCHAR message[1024];
    if (SQL_SUCCESS == SQLGetDiagRec(handleType, handle, 1, SQLState, NULL, message, 1024, NULL))
        cout << "SQL driver message: " << message << "\nSQL state: " << SQLState << "." << endl;
}

int main()
{
    SQLHANDLE SQLEnvHandle = NULL;
    SQLHANDLE SQLConnectionHandle = NULL;
    SQLHANDLE SQLStatementHandle = NULL;
    SQLRETURN retCode = 0;

    do {
        if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &SQLEnvHandle))
            break;

        if (SQL_SUCCESS != SQLSetEnvAttr(SQLEnvHandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0))
            break;

        if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC, SQLEnvHandle, &SQLConnectionHandle))
            break;

        if (SQL_SUCCESS != SQLSetConnectAttr(SQLConnectionHandle, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0))
            break;

        SQLCHAR retConString[1024]; 
        switch (SQLDriverConnect(SQLConnectionHandle, NULL, (SQLCHAR*)"DRIVER={SQL Server}; SERVER=DESKTOP-MYSERVER\\SQLEXPRESS, 1433; DATABASE=mydatabase; UID=sa; PWD=mypassword;", SQL_NTS, retConString, 1024, NULL, SQL_DRIVER_NOPROMPT)) {
            
        case SQL_SUCCESS:
            std::cout << "YES" << std::endl;
            break;
        case SQL_SUCCESS_WITH_INFO:
            std::cout << "YES" << std::endl;
            break;
        case SQL_NO_DATA_FOUND:
            showSQLError(SQL_HANDLE_DBC, SQLConnectionHandle);
            retCode = -1;
            break;
        case SQL_INVALID_HANDLE:
            showSQLError(SQL_HANDLE_DBC, SQLConnectionHandle);
            retCode = -1;
            break;
        case SQL_ERROR:
            cout << "Here" << endl; // it is failing here <<<<<<
            showSQLError(SQL_HANDLE_DBC, SQLConnectionHandle);
            retCode = -1;
            break;
        default:
            break;
        }

        if (retCode == -1)
            break;

        if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT, SQLConnectionHandle, &SQLStatementHandle))
            break;

        //Some sql query execution after connecting to the database.
    } while (FALSE);

    SQLFreeHandle(SQL_HANDLE_STMT, SQLStatementHandle);
    SQLDisconnect(SQLConnectionHandle);
    SQLFreeHandle(SQL_HANDLE_DBC, SQLConnectionHandle);
    SQLFreeHandle(SQL_HANDLE_ENV, SQLEnvHandle);

    getchar();
}

我已经尝试了Internet上建议的所有可能解决方案,例如以管理员身份运行VS,将Trusted_Connection=yes;代替UID / PWD,将localhost放入SERVER,或者有些建议我应该启用TCP / SQL Server配置中的IP和命名管道以及服务中的SQL Server浏览器。

但是这些都不起作用,我将用户名为sa的数据库添加到ODBC DSN用户和DSN系统,也没有运气。
这就是我在控制台中得到的:

enter image description here

我错过了什么吗?怎么回事?
预先感谢

1 个答案:

答案 0 :(得分:0)

任何人都遇到问题,我通过在SQL Server配置> TCP / IP>属性> IP地址选项卡(最后)中添加端口1433来解决此问题。 同时启用TCP / IP。

相关问题