Witam, mam taki kod:
#include "stdafx.h"
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <iostream>using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{SQLHENV sql_hEnv = 0;
SQLHDBC sql_hDBC = 0;
SQLHSTMT sql_hStmt = 0;SQLWCHAR szDNS[1024] ={0};
SQLSMALLINT nSize = 0;SQLRETURN sqlRet =
SQLAllocHandle( SQL_HANDLE_ENV,
SQL_NULL_HANDLE,
&sql_hEnv );sqlRet =
SQLSetEnvAttr( sql_hEnv,
SQL_ATTR_ODBC_VERSION,
(void*) SQL_OV_ODBC3,
0 );sqlRet =
SQLAllocHandle( SQL_HANDLE_DBC,
sql_hEnv,
&sql_hDBC );// if 0 - use SQLDriverConnect
// if 1 - use SQLConnect
//
#if 0
sqlRet =
SQLConnect( sql_hDBC,
L"localhost:3306",
SQL_NTS,
L"root",
SQL_NTS,
L"admin",
SQL_NTS );#else
sqlRet =
SQLDriverConnect( sql_hDBC,
0,
L"SERVER=localhost;option=0;port=3306;UID=root;",
SQL_NTS,
szDNS,
1024,
&nSize,
SQL_DRIVER_COMPLETE );
#endifif( SQL_SUCCEEDED( sqlRet ) )
{
cout << "Connected to database " << endl
<< "Connection Info: " << endl
<< szDNS << endl;
sqlRet =
SQLAllocHandle( SQL_HANDLE_STMT,
sql_hDBC,
&sql_hStmt );sqlRet = SQLExecDirect( sql_hStmt, L"SELECT * FROM COLLATIONS;", SQL_NTS ); SQLSMALLINT nCols = 0; SQLINTEGER nRows = 0; SQLINTEGER nIdicator = 0; SQLCHAR buf[1024] = {0}; SQLNumResultCols( sql_hStmt, &nCols ); SQLRowCount( sql_hStmt, &nRows ); while( SQL_SUCCEEDED( sqlRet = SQLFetch( sql_hStmt ) ) ) { cout << "Row " << endl; for( int i=1; i <= nCols; ++i ) { sqlRet = SQLGetData( sql_hStmt, i, SQL_C_CHAR, buf, 1024, &nIdicator ); if( SQL_SUCCEEDED( sqlRet ) ) { cout << "Column " << buf << endl; } } } // while SQLFreeHandle( SQL_HANDLE_STMT, sql_hStmt ); SQLDisconnect( sql_hDBC );
}
else
{
cout << "Failed to connect to the database" << endl;
}SQLFreeHandle( SQL_HANDLE_DBC, sql_hDBC );
SQLFreeHandle( SQL_HANDLE_ENV, sql_hEnv );system("PAUSE");
return 0;
}
Wszystko się pięknie kompiluje lecz nie mogę połączyć się z bazą danych tzn ciągle widzę na ekranie "Failed to connect to the database".
Pracuję w VS 2008, jako serwera bazy danych używam MySQL'a z xampp'a - firewall jest odpowiednio skonfigurowany do pracy z tym wyposażeniem. Użytkownik root nie ma włączonej autoryzacji hasłem.
Wielokrotnie modyfikowałem linijkę "SERVER=localhost;option=0;port=3306;UID=root;" pod różnym kątem lecz efekt ten sam.
Proszę o pomoc