我試圖從新創建的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,根本不會產生任何錯誤消息。
我在這裏做錯了什麼?由於
'(SQLWCHAR *)'是一個明顯的錯誤。嘗試使用'L'而不是使字符串文字變成寬字符串文字。 – ildjarn 2012-07-17 20:09:44
謝謝,現在需要更長的時間。需要一分鐘左右才能返回「無法連接」。 – Elarys 2012-07-17 20:17:42
我記得,默認的連接超時時間是60秒,所以你可能會遇到這種情況。檢查你的SQL協議設置,如果它被配置爲在本地使用TCP,請檢查你的防火牆設置。 – ildjarn 2012-07-17 20:19:02