コード例 #1
0
ファイル: ODBC1.cpp プロジェクト: Shad000w/NWNX2-windows
BOOL CODBC::WriteScorcoData(char* SQL, BYTE* pData, int Length)
{
	SQLRETURN retcode;
	SQLINTEGER cbObjectParam;
	SQLPOINTER pToken;

	char* pSQL = new char[strlen(SQL)];
	sprintf(pSQL, SQL, "?");

	SQLFreeStmt(hstmt,SQL_CLOSE);
	retcode = SQLPrepare(hstmt, (unsigned char *)pSQL, SQL_NTS);
	if (MYSQLSUCCESS(rc))
	{
		SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_LONGVARBINARY, 
			0, 0, (SQLPOINTER) 2, 0, &cbObjectParam);

		cbObjectParam = SQL_LEN_DATA_AT_EXEC(0);
		retcode = SQLExecute(hstmt);

		while (retcode == SQL_NEED_DATA)
		{
			retcode = SQLParamData(hstmt, &pToken);
			if (retcode == SQL_NEED_DATA)
				SQLPutData(hstmt, pData, Length);
		}
		return TRUE;
	}
	else
	{
		SaveSQLError();
		return FALSE;
	}
}
コード例 #2
0
ファイル: odbc.cpp プロジェクト: HellSinker/nwnx2-win32
// Execute SQL command with SQLExecDirect() ODBC API.
int direxec::sqlexec(char *buffer, unsigned int buffersize)
{
	SQLFreeStmt(hstmt,SQL_CLOSE);

	rc=SQLExecDirect(hstmt, (unsigned char *) buffer, SQL_NTS);
	if (!MYSQLSUCCESS(rc))  // Error
	{
		errorstate = TRUE;

		char *msg = error_msg();
		if (strlen(msg) < buffersize)
			strcpy(buffer, msg);
		else
		{
			strncpy(buffer, msg, buffersize);
			buffer[buffersize] = 0x0;
		}

		return -1;
	}
	else
		errorstate = FALSE;

	strcpy(buffer, "");
	return 0;
}
コード例 #3
0
ファイル: odbc.cpp プロジェクト: HellSinker/nwnx2-win32
// Allocate environment handle, allocate connection handle,
// connect to data source, and allocate statement handle.
bool direxec::sqlconn(FILE* file)
{
	logFile = file;
	unsigned int timeout = 10; // seconds
	SQLAllocEnv(&henv);
	SQLAllocConnect(henv,&hdbc);
	SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, &timeout, 0);
	rc=SQLConnect(hdbc,chr_ds_name,SQL_NTS,NULL,0,NULL,0);
   
	// Deallocate handles, display error message, and exit.
	if (!MYSQLSUCCESS(rc))
	{
		SQLCHAR SqlState[6];
		SQLINTEGER NativeError;
		SQLSMALLINT MsgLen;

		SQLGetDiagRec(SQL_HANDLE_DBC, hdbc, 1, SqlState, &NativeError, (unsigned char *) szData, 2048, &MsgLen);
		SQLFreeEnv(henv);
		SQLFreeConnect(hdbc);

		fprintf(logFile, "! Error while connecting to database: %s\n", szData);
		errorstate = TRUE;
		return FALSE;
	}

	rc=SQLAllocStmt(hdbc,&hstmt);
	errorstate = FALSE;
	return TRUE;
}
コード例 #4
0
ファイル: ODBC1.cpp プロジェクト: Shad000w/NWNX2-windows
BOOL CODBC::Execute(const uchar *query)
{
	SQLFreeStmt(hstmt,SQL_CLOSE);

	// execute the query
	rc=SQLExecDirect(hstmt, (unsigned char *)query, SQL_NTS);
	if (!MYSQLSUCCESS(rc))  // Error
	{
		SaveSQLError ();
		return FALSE;
	}
	return TRUE;
}
コード例 #5
0
ファイル: ODBC1.cpp プロジェクト: Shad000w/NWNX2-windows
BYTE* CODBC::ReadScorcoData(char* SQL, char *param, BOOL* pSqlError, int *size)
{
	SQLSMALLINT NumCols;
	SQLUINTEGER columnSizePtr;

	if (strcmp(param, "FETCHMODE") != 0)
	{	
		SQLFreeStmt(hstmt,SQL_CLOSE);

		// execute the query
		rc=SQLExecDirect(hstmt, (unsigned char *)SQL, SQL_NTS);
		if (!MYSQLSUCCESS(rc))
		{
			SaveSQLError();
			*pSqlError = true;
			return NULL;
		}
	}

	*pSqlError = false;
	// walk through the resultset
	if (SQLFetch(hstmt) != SQL_SUCCESS)
		return NULL;

	SQLNumResultCols(hstmt, &NumCols);
	if (NumCols == 1)
	{
		SQLDescribeCol(hstmt, 1, NULL, 0, NULL, NULL, &columnSizePtr, NULL, NULL);
		if (columnSizePtr > MAXRESULT)
		{
			sprintf(lastError, "Critical error - object too large (>%ld bytes).\n", MAXRESULT);
			*pSqlError = true;
			return NULL;
		}
		SQLGetData(hstmt, 1, SQL_C_BINARY, pReturn, columnSizePtr, &cbData);
		*size = columnSizePtr;
		return pReturn;	
	}
	else
		return NULL;
}
コード例 #6
0
ファイル: ODBC1.cpp プロジェクト: Shad000w/NWNX2-windows
BOOL CODBC::Connect(char* DSN, int timeout)
{
	SQLAllocEnv (&henv);
	SQLAllocConnect (henv,&hdbc);
	SQLSetConnectAttr (hdbc, SQL_LOGIN_TIMEOUT, &timeout, 0);
	rc = SQLConnect (hdbc, (unsigned char*)DSN, SQL_NTS, NULL, 0, NULL, 0);

	// On error: deallocate handles, display error message, and exit.
	if (!MYSQLSUCCESS(rc))
	{
		SQLCHAR SqlState[6];
		SQLINTEGER NativeError;
		SQLSMALLINT MsgLen;

		SQLGetDiagRec(SQL_HANDLE_DBC, hdbc, 1, SqlState, &NativeError, (unsigned char *)lastError, 2048, &MsgLen);
		SQLFreeEnv(henv);
		SQLFreeConnect(hdbc);
		return FALSE;
	}

	// connecting was succesfull
	rc=SQLAllocStmt(hdbc, &hstmt);
	return TRUE;
}