2011-03-17 17 views
6

से कनेक्ट करने के लिए ओडीबीसी का उपयोग करना मैं एक डब्ल्यूबी मशीन के साथ कनेक्शन प्राप्त करने की कोशिश कर रहा हूं। उस उद्देश्य के लिए, मैं एक उदाहरण कार्यक्रम का परीक्षण शुरू करने की कोशिश की:एसक्यूएल सर्वर 2008

#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){ 
    SQLCHAR sqlstate[1024]; 
    SQLCHAR message[1024]; 
    if(SQL_SUCCESS == SQLGetDiagRec(handletype, handle, 1, sqlstate, NULL, message, 1024, NULL)) 
     cout<<"Message: "<<message<<"\nSQLSTATE: "<<sqlstate<<endl; 
} 

int main(){ 

    SQLHANDLE sqlenvhandle; 
    SQLHANDLE sqlconnectionhandle; 
    SQLHANDLE sqlstatementhandle; 
    SQLRETURN retcode; 

    if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlenvhandle)) 
     goto FINISHED; 

    if(SQL_SUCCESS!=SQLSetEnvAttr(sqlenvhandle,SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0)) 
     goto FINISHED; 

    if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle)) 
     goto FINISHED; 

    SQLCHAR retconstring[1024]; 
    switch(SQLDriverConnect (sqlconnectionhandle, 
       NULL, 
       (SQLCHAR*)"DRIVER={SQL Server};SERVER=localhost, 1433;DATABASE=MyDatabase;UID=sa;PWD=Admin-123;", 
       SQL_NTS, 
       retconstring, 
       1024, 
       NULL, 
       SQL_DRIVER_NOPROMPT)){ 
     case SQL_SUCCESS_WITH_INFO: 
      show_error(SQL_HANDLE_DBC, sqlconnectionhandle); 
      break; 
     case SQL_INVALID_HANDLE: 
     case SQL_ERROR: 
      show_error(SQL_HANDLE_DBC, sqlconnectionhandle); 
      goto FINISHED; 
     default: 
      break; 
    } 

    if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT, sqlconnectionhandle, &sqlstatementhandle)) 
     goto FINISHED; 

    if(SQL_SUCCESS!=SQLExecDirect(sqlstatementhandle, (SQLCHAR*)"select * from testtable", SQL_NTS)){ 
     show_error(SQL_HANDLE_STMT, sqlstatementhandle); 
     goto FINISHED; 
    } 
    else{ 
     char name[64]; 
     char address[64]; 
     int id; 
     while(SQLFetch(sqlstatementhandle)==SQL_SUCCESS){ 
      SQLGetData(sqlstatementhandle, 1, SQL_C_ULONG, &id, 0, NULL); 
      SQLGetData(sqlstatementhandle, 2, SQL_C_CHAR, name, 64, NULL); 
      SQLGetData(sqlstatementhandle, 3, SQL_C_CHAR, address, 64, NULL); 
      cout<<id<<" "<<name<<" "<<address<<endl; 
     } 
    } 

FINISHED: 
    SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle); 
    SQLDisconnect(sqlconnectionhandle); 
    SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle); 
    SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle); 

} 

समस्या यह है कि मैं कई समस्याओं जब संकलित करने के लिए, अघोषित प्रकार के बारे में, उदाहरण के लिए कोशिश कर रहा है:

'SQLHANDLE' has not been declared 
'SQLHDESC' was not declared in this scope 

मैं लिंक करने के बाद libodbccpp32.a और libodbc32.a पुस्तकालयों के लिए पहले से ही। क्या है कि मैं गलत कर रहा हूँ?

+0

त्रुटि यह इंगित करती है कि आपने ओडीबीसी हेडर को शामिल नहीं किया है जो स्क्लेन्डल/एसक्लह्डेस्क का वर्णन करता है। मुझे लगता है कि यह ntodbc.h में है। – Dan

+0

क्या आपको कोई विचार है कि मैं उस हेडर को कहां प्राप्त कर सकता हूं? – Filgera

+0

ऐसा लगता है कि वह सिबेज एसडीके का उपयोग कर रहा था जिसका मैं उपयोग कर रहा था। यहां माइक्रोसॉफ्ट की एक सूची दी गई है। http://msdn.microsoft.com/en-us/library/ms713603%28v=VS.85%29.aspx। यह वास्तव में sqltypes.h है कि माइक्रोसॉफ्ट एसडीके एक है। यहां है जहां मैंने इसे स्थापित किया है सी: \ प्रोग्राम फ़ाइलें \ माइक्रोसॉफ्ट विजुअल स्टूडियो .NET 2003 \ Vc7 \ PlatformSDK \ शामिल करें। क्या आपके संकलन त्रुटियों में कोई और विवरण है क्योंकि आपने इसे शामिल किया है? आप पथ की तरह क्या दिखते हैं? – Dan

उत्तर

1

मैं stdafx.h हैडर शामिल आदेश के बजाय होना चाहिए के साथ मिल गया है:

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

बस बदलने के इस तरह घोषणाओं में शामिल हैं:

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

आदेश हेडर फाइल फर्क नहीं पड़ता। बस सुनिश्चित करें कि आपके परियोजना अपने गुणों में निम्नलिखित शामिल निर्देशिका में शामिल हैं:

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include 

जहां पाए जाते हैं (एक प्रायोरी):

windows.h 
sqlext.h 
sqltypes.h 
sql.h 

यह आपके आदेशों मान्यता प्राप्त है और बिना किसी समस्या के संकलन करने में पर्याप्त होता ।

संबंधित मुद्दे