2016-03-06 49 views
1

我剛剛設法建立了從Visual Studio C++應用程序到我的SQL Server的連接,但是不能爲我的生活做我的聲明,因爲他們應該。在Visual Studio C++中執行簡單的SQL查詢時出錯

我有一些在SQL Server中創建大中型腳本的經驗,但由於某些原因,下面的代碼只是給我錯誤,而不是讓我獲取數據並通過它工作。

正如我所提到的,我對連接沒有任何問題,因爲我在檢查連接狀態時沒有發現任何錯誤。

這裏是我的代碼:

#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)) 
     cout << "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};SERVER=DESKTOP-L5OT4OH\\SQLEXPRESS;DATABASE=Easier;UID=geo;PWD=password123;", 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"; 
    } 
    if (SQL_SUCCESS != SQLExecDirect(stmt, (SQLWCHAR*)" USE Easier select personid from dbo.TPERSON", SQL_NTS)) { 
     show_error(SQL_HANDLE_STMT, stmt); 
    } 
    else { 
     int id; 
     while (SQLFetch(stmt) == SQL_SUCCESS) { 
      SQLGetData(stmt, 1, SQL_C_ULONG, &id, 0, NULL); 
      cout << id << endl; 
     } 
    } 

    return 0; 
} 

據我瞭解我的代碼

  • 設置通過ODBC到我的本地SQL Server數據庫的連接
  • 檢查所述連接
  • (?)
  • 嘗試創建並執行非常基本的SQL查詢(在我的SQL管理器中工作,在任何人詢問之前)。
  • 遍歷獲取的數據以解析數據並將其發送到cout。

請問你們看看我可能犯了什麼樣的錯誤?

我不會問這樣一個簡單的問題,如果有任何關於如何使用C++應用程序設置SQL服務器的可理解指南,但我已經完全無法找到它。

編輯:

show_error提供了以下錯誤信息:

消息:0018ED9C

SQLSTATE:0018F5A4

+0

你會得到什麼錯誤? –

+0

在編輯中添加了錯誤消息 – geostocker

+0

在'show_error'中使用'wcout'來代替'cout'。這樣您可以打印實際的消息文本,而不是存儲它的地址(這根本沒有幫助)。 –

回答

0

這似乎是SQLExecDirect的不喜歡事實上,我明確表示它使用「USE Easier」,因爲它已經在本週宣佈e連接字符串。