簡體   English   中英

ODBC連接未打開

[英]ODBC connection not open

我最近從筆記本電腦向台式機發送了一些工作代碼。 即使他們都使用相同的技術(Visual Studio社區15和SQL Server 14),我也無法連接到台式機上的數據庫。

兩者上都有相同的ODBC驅動程序(並在桌面上嘗試了各種組合)。 雖然控制了從ODBC到SQL Server的連接,這似乎很好,但是當我從調試器運行應用程序時,我收到此錯誤:

消息:[Microsoft] [ODBC驅動程序管理器]連接未打開

SQLSTATE:08003連接失敗

這是代碼:

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>
using namespace std;

void show_error(unsigned int handletype, const SQLHANDLE& handle)
{
    SQLWCHAR sqlstate[1024];
    SQLWCHAR message[1024];
    if (SQL_SUCCESS == SQLGetDiagRec(handletype, handle, 1, sqlstate, NULL, message, 1024, NULL))
        wcout << "Message: " << message << "\nSQLSTATE: " << sqlstate << endl;
}

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};ERA-PC-STUART\\JBK_DB;DATABASE=master;UID=geo;PWD=kalle123;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

    /* Check for success */
    if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt))
    {
        show_error(SQL_HANDLE_DBC, dbc);
        std::cout << "Failed to connect";
    }
    if (SQL_SUCCESS != SQLExecDirectW(stmt, L"select salary from dbo.salary_table", SQL_NTS)) {
        show_error(SQL_HANDLE_STMT, stmt);
    }
    else {
        int id;
        cout << "ID:" << endl;
        while (SQLFetch(stmt) == SQL_SUCCESS) {
            SQLGetData(stmt, 1, SQL_C_ULONG, &id, 0, NULL);
            cout << id << endl;
        }
    }

    return 0;
}

如前所述,該代碼可以在我的筆記本電腦上完美運行,但是由於某些原因,即使ODBC連接,它也無法在台式機上運行。

這可能是由於Windows版本問題引起的。 您的筆記本電腦可能在64位操作系統上運行,而台式機可能在32位操作系統上運行。 使用32位odbc數據源管理員在桌面上創建新的DSN,然后重試。代碼沒有問題。

對於將來可能會遇到此問題的人; 確保在SQL Server配置管理器中啟用了TCP / IP。

在我的情況下,以上功能被禁用,並且連接字符串中缺少“ Server =“。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM