2012-07-17 253 views
2

我試圖從新創建的C++應用程序連接到本地SQL Server 2008實例。我仍然在學習C++,所以我可能會錯過一些明顯的東西。C++ ODBC SQL Server 2008連接

我正在使用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,根本不會產生任何錯誤消息。

我在這裏做錯了什麼?由於

+1

'(SQLWCHAR *)'是一個明顯的錯誤。嘗試使用'L'而不是使字符串文字變成寬字符串文字。 – ildjarn 2012-07-17 20:09:44

+0

謝謝,現在需要更長的時間。需要一分鐘左右才能返回「無法連接」。 – Elarys 2012-07-17 20:17:42

+0

我記得,默認的連接超時時間是60秒,所以你可能會遇到這種情況。檢查你的SQL協議設置,如果它被配置爲在本地使用TCP,請檢查你的防火牆設置。 – ildjarn 2012-07-17 20:19:02

回答

3

從評論轉貼這樣的問題可以被關閉:

  • (SQLWCHAR*)是一個明顯的錯誤。嘗試L而不是使字符串文字爲字符串文字。

  • 默認的連接超時時間是60秒,所以你可能會遇到這種情況。檢查你的SQL協議設置,如果它被配置爲在本地使用TCP,請檢查你的防火牆設置。

+0

偉大的職位,一些VC++ ODBC連接的例子沒有提到這個! – hkdeveloper758 2012-12-28 03:38:42