Я использую базу данных ODBC sql server 2014, и моя программа написана в visual studio C++. Я хочу интегрировать свою программу на C++ с базой данных sql server 2014, чтобы выполнить некоторые простые действия вставки и извлечения.SQL ODBC - ошибка SQL
Я написал простой тест, чтобы проверить соединение между сервером sql и моей программой. Однако выход моей программы показывает, что есть ошибка sql. Реткод возвращает -1.
пожалуйста совет.
выход моей программы показан ниже
мой код выглядит следующим образом:
#include "stdafx.h"
#include <string>
#include <iostream>
#include <sstream>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>
RETCODE retrieveRc;
HENV retrieveHenv;
HDBC retrieveHdbc;
HSTMT retrieveHstmt;
using namespace std;
void RetrieveConnectToDatabase();
void DisplayResults();
int _tmain(int argc, _TCHAR* argv[])
{
RetrieveConnectToDatabase();
cin.get();
return 0;
}
void RetrieveConnectToDatabase()
{
cout << "Attempting Database Connection for Retrieving " << endl;
//Set Environment Handle
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &retrieveHenv);
//Set ODBC Driver Version
SQLSetEnvAttr(retrieveHenv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
//Set Connection Handle
SQLAllocHandle(SQL_HANDLE_DBC, retrieveHenv, &retrieveHdbc);
//Connect to Database
retrieveRc = SQLConnect(retrieveHdbc, L"database", SQL_NTS, L"", SQL_NTS, L"", SQL_NTS);
SQLAllocHandle(SQL_HANDLE_STMT, retrieveHdbc, &retrieveHstmt);
if ((retrieveRc != SQL_SUCCESS) && (retrieveRc != SQL_SUCCESS_WITH_INFO))
{
cout << "Cannot open database -- make sure ODBC is confugured properly." << endl;
SQLFreeConnect(retrieveHdbc);
SQLFreeEnv(retrieveHenv);
cout << "Press ENTER to continue." << endl;
}
else
{
cout << "Connected -- ODBC is confugured properly." << endl;
string queryDatabase;
stringstream usernameQueryStr;
usernameQueryStr << "SELECT * FROM [trackmanagementdatabase].[dbo].[user];";
queryDatabase = usernameQueryStr.str();
wchar_t* p = new wchar_t[1000];
for (string::size_type i = 0; i < usernameQueryStr.str().size(); i++)
{
p[i] = queryDatabase[i];
}
if (sizeof(queryDatabase) != 0)
{
RETCODE retrieveRetCode;
SQLSMALLINT sNumResults;
// Execute the query
//wzsInput contains sql statement
retrieveRetCode = SQLExecDirect(retrieveHstmt, p, SQL_NTS);
cout << "retrieveRetCode: " << retrieveRetCode << endl;
switch (retrieveRetCode)
{
case SQL_SUCCESS_WITH_INFO:
{
}
case SQL_SUCCESS:
{
// If this is a row-returning query, display
// results
SQLNumResultCols(retrieveHstmt, &sNumResults);
//display result
DisplayResults();
if (sNumResults > 0)
{
DisplayResults();
}
else
{
cout << "SQL Success else" << endl;
SQLLEN cRowCount;
SQLRowCount(retrieveHstmt, &cRowCount);
cout << "cRowCount: " << cRowCount << endl;
if (cRowCount >= 0)
{
wprintf(L"%Id %s affected\n",
cRowCount,
cRowCount == 1 ? L"row" : L"rows");
}
}
break;
}
case SQL_ERROR:
{
break;
}
default:
fwprintf(stderr, L"Unexpected return code %hd!\n", retrieveRetCode);
cout << "it came in here default" << endl;
}
}
}
}
void DisplayResults()
{
}