ultimatepp/uppdev/odbctest/odbctest.cpp
cxl a26d071cef syncing uppdev
git-svn-id: svn://ultimatepp.org/upp/trunk@918 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2009-03-06 17:08:28 +00:00

134 lines
4.4 KiB
C++

#include <Core/Core.h>
#include <sql.h>
#include <sqlext.h>
#define MAXDSN 25
#define MAXUID 25
#define MAXAUTHSTR 25
#define MAXBUFLEN 255
#define BUFFERSIZE 450
using namespace Upp;
void ProcessLogMessages(HDBC hdbc, HSTMT hstmt, char *logstring)
{
SQLCHAR SqlState[6], Msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER NativeError;
SQLSMALLINT MsgLen;
if(SQLGetDiagRec(SQL_HANDLE_DBC, hdbc, 1, SqlState, &NativeError,
Msg, sizeof(Msg), &MsgLen) != SQL_NO_DATA) {
DDUMP((char *)SqlState);
DDUMP((char *)Msg);
}
LOG(logstring);
}
CONSOLE_APP_MAIN
{
HENV henv = SQL_NULL_HENV;
HDBC hdbc1 = SQL_NULL_HDBC;
HSTMT hstmt1 = SQL_NULL_HSTMT;
char logstring[MAXBUFLEN] = "";
RETCODE retcode;
SWORD cntr;
//SQLGetData variables.
UCHAR Data[BUFFERSIZE];
SDWORD cbBatch = (SDWORD)sizeof(Data)-1;
SDWORD cbBinSize;
// Clear data array.
for(cntr = 0; cntr < BUFFERSIZE; cntr++)
Data[cntr] = 0x00;
// Allocate the ODBC environment and save handle.
retcode = SQLAllocEnv (&henv);
SQLAllocConnect(henv, &hdbc1);
char tmpStr[1024];
char maxStr[1024];
// strcpy(tmpStr, "Provider=SQL Server Native Client 10.0;Data Source=QUAD\\SQLEXPRESS;Trusted_Connection=Yes;");
strcpy(tmpStr, "DRIVER=SQL Server Native Client 10.0;SERVER=QUAD\\SQLEXPRESS;DATABASE=Holly;UID=test;PWD=koblih;");
// strcpy(tmpStr, "DRIVER=SQL Server Native Client 10.0;SERVER=QUAD\\SQLEXPRESS;Trusted_Connection=Yes;");
memset(maxStr, 0x00, sizeof(maxStr));
SQLSMALLINT returnSize=0;
retcode = ::SQLDriverConnect(hdbc1, NULL, (SQLCHAR *)tmpStr, strlen(tmpStr), (SQLCHAR *)maxStr, sizeof(maxStr), &returnSize,
SQL_DRIVER_NOPROMPT );
DDUMP(retcode);
/*
// Allocate ODBC connection and connect.
retcode = SQLAllocConnect(henv, &hdbc1);
// Make the connection, then print the information messages.
retcode = SQLConnect(hdbc1, szDSN, (SWORD)strlen((char *)szDSN),
szUID, (SWORD)strlen((char *)szUID),
szAuthStr,
(SWORD)strlen((char *)szAuthStr));*/
if ( (retcode != SQL_SUCCESS) &&
(retcode != SQL_SUCCESS_WITH_INFO) ) {
ProcessLogMessages(hdbc1, hstmt1,
"SQLConnect() Failed\n\n");
return;
}
else {
ProcessLogMessages(hdbc1, hstmt1,
"\nConnect Successful\n\n");
}
// Allocate the statement handle.
retcode = SQLAllocStmt(hdbc1,&hstmt1);
// Execute the SELECT statement.
retcode = SQLExecDirect(hstmt1, (SQLCHAR *)"SELECT TEXT FROM SUBJECT_ATTR", SQL_NTS);
if ( (retcode != SQL_SUCCESS) &&
(retcode != SQL_SUCCESS_WITH_INFO) ) {
ProcessLogMessages(hdbc1, hstmt1,
"SQLExecDirect hstmt1 Failed\n\n");
return;
}
// Get first row.
for(;;) {
retcode = SQLFetch(hstmt1);
if(retcode == SQL_NO_DATA)
break;
if ( (retcode != SQL_SUCCESS) &&
(retcode != SQL_SUCCESS_WITH_INFO) ) {
ProcessLogMessages(hdbc1, hstmt1,
"SQLFetch hstmt1 Failed\n\n");
return;
}
SQLLEN len;
byte buffer[1024];
SQLGetData(hstmt1, 1, SQL_C_CHAR, buffer, 1024, &len);
if(len > 0)
DDUMP(String(buffer, len));
else
LOG("NULL");
// Get the SQL_LONG column. CbBatch has size of data chunk
// the buffer can handle. Call SQLGetData until
// SQL_NO_DATA_FOUND. cbBinSize on each call has the
// amount of data left to transfer.
/* cntr = 1;
do {
retcode = SQLGetData(hstmt1, // hstmt
1, // ipar
SQL_C_BINARY, // fCType
Data, // rgbValue
cbBatch, // cbValueMax
&cbBinSize); // pcbValue
printf("GetData iteration %d, pcbValue = %d\n", cntr++, cbBinSize);
if ( (retcode != SQL_SUCCESS) &&
(retcode != SQL_SUCCESS_WITH_INFO) &&
retcode != SQL_NO_DATA_FOUND ){
ProcessLogMessages(hdbc1, hstmt1, "SQLGetData hstmt1 Failed\n\n");
return;
}
} while (retcode != SQL_NO_DATA_FOUND);
*/ /* Clean up. */
}
LOG("OK");
SQLFreeStmt(hstmt1, SQL_DROP);
SQLDisconnect(hdbc1);
SQLFreeConnect (hdbc1);
SQLFreeEnv(henv);
return;
}