/////////////////////////////////////////////////////////////////////////////////////////////////////////// // // SQLOBJ.CPP // // SQL Wrapper Object // // Copyright (c) Microsoft Corporation 1998 // /////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "precomp.h" #include "sqlobj.h" SQL::SQL(void) { TCHAR path[_MAX_PATH]; GetSystemDirectory(path, sizeof(path)/sizeof(TCHAR)); lstrcat(path, TEXT("\\odbccp32.dll")); m_hODBCCP = LoadLibrary(path); m_hODBC = NULL; if (m_hODBCCP) { GetSystemDirectory(path, sizeof(path)/sizeof(TCHAR)); lstrcat(path, TEXT("\\odbc32.dll")); m_hODBC = LoadLibrary(path); if (m_hODBC == NULL) { FreeLibrary(m_hODBCCP); } } if (m_hODBCCP && m_hODBC) { m_pfnSetPos = (SQ_SETPOS) GetProcAddress( m_hODBC, "SQLSetPos"); m_pfnExtendedFetch = (SQ_EXTENDEDFETCH) GetProcAddress( m_hODBC, "SQLExtendedFetch"); m_pfnFreeStmt = (SQ_FREESTMT) GetProcAddress( m_hODBC, "SQLFreeStmt"); m_pfnSetStmtOption = (SQ_SETSTMTOPTION) GetProcAddress( m_hODBC, "SQLSetStmtOption"); m_pfnBindCol = (SQ_BINDCOL) GetProcAddress( m_hODBC, "SQLBindCol"); m_pfnAllocStmt = (SQ_ALLOCSTMT) GetProcAddress( m_hODBC, "SQLAllocStmt"); m_pfnFreeConnect = (SQ_FREECONNECT) GetProcAddress( m_hODBC, "SQLFreeConnect"); m_pfnFreeEnv = (SQ_FREEENV) GetProcAddress( m_hODBC, "SQLFreeEnv"); m_pfnDisconnect = (SQ_DISCONNECT) GetProcAddress( m_hODBC, "SQLDisconnect"); m_pfnAllocConnect = (SQ_ALLOCCONNECT) GetProcAddress( m_hODBC, "SQLAllocConnect"); m_pfnAllocEnv = (SQ_ALLOCENV) GetProcAddress( m_hODBC, "SQLAllocEnv"); m_pfnTransact = (SQ_TRANSACT) GetProcAddress( m_hODBC, "SQLTransact"); m_pfnFetch = (SQ_FETCH) GetProcAddress( m_hODBC, "SQLFetch"); #ifdef UNICODE m_pfnConfigDataSource = (SQ_CONFIGDATASOURCE) GetProcAddress( m_hODBCCP, "SQLConfigDataSourceW"); m_pfnConnect = (SQ_CONNECT) GetProcAddress( m_hODBC, "SQLConnectW"); m_pfnError = (SQ_ERROR) GetProcAddress( m_hODBC, "SQLErrorW"); m_pfnExecDirect = (SQ_EXECDIRECT) GetProcAddress( m_hODBC, "SQLExecDirectW"); m_pfnSetConnectOption = (SQ_SETCONNECTOPTION) GetProcAddress( m_hODBC, "SQLSetConnectOptionW"); m_pfnStatistics = (SQ_STATISTICS) GetProcAddress( m_hODBC, "SQLStatisticsW"); m_pfnDescribeCol = (SQ_DESCRIBECOL) GetProcAddress( m_hODBC, "SQLDescribeColW"); #else //for some reason, there is no "A" on odbc's export of SQLConfigDataSource m_pfnConfigDataSource = (SQ_CONFIGDATASOURCE) GetProcAddress( m_hODBCCP, "SQLConfigDataSource"); m_pfnConnect = (SQ_CONNECT) GetProcAddress( m_hODBC, "SQLConnectA"); m_pfnError = (SQ_ERROR) GetProcAddress( m_hODBC, "SQLErrorA"); m_pfnExecDirect = (SQ_EXECDIRECT) GetProcAddress( m_hODBC, "SQLExecDirectA"); m_pfnSetConnectOption = (SQ_SETCONNECTOPTION) GetProcAddress( m_hODBC, "SQLSetConnectOptionA"); m_pfnStatistics = (SQ_STATISTICS) GetProcAddress( m_hODBC, "SQLStatisticsA"); m_pfnDescribeCol = (SQ_DESCRIBECOL) GetProcAddress( m_hODBC, "SQLDescribeColA"); #endif if (!m_pfnConfigDataSource || !m_pfnSetPos || !m_pfnExtendedFetch || !m_pfnFreeStmt || !m_pfnExecDirect || !m_pfnSetStmtOption || !m_pfnBindCol || !m_pfnError || !m_pfnAllocStmt || !m_pfnFreeConnect || !m_pfnFreeEnv || !m_pfnDisconnect || !m_pfnConnect || !m_pfnAllocConnect || !m_pfnAllocEnv || !m_pfnSetConnectOption || !m_pfnTransact || !m_pfnFetch || !m_pfnStatistics || !m_pfnDescribeCol) { FreeLibrary(m_hODBC); FreeLibrary(m_hODBCCP); m_hODBC = NULL; m_hODBCCP = NULL; } } } SQL::~SQL(void) { if (m_hODBC) { FreeLibrary(m_hODBC); } if (m_hODBCCP) { FreeLibrary(m_hODBCCP); } } BOOL SQL::Initialize(void) { return (m_hODBC != NULL); } BOOL INSTAPI SQL::ConfigDataSource(HWND hwndParent, WORD fRequest,LPCTSTR lpszDriver, LPCTSTR lpszAttributes) { return m_pfnConfigDataSource(hwndParent, fRequest, lpszDriver, lpszAttributes); } SQLRETURN SQL_API SQL::SetPos( SQLHSTMT hstmt, SQLUSMALLINT irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock) { return m_pfnSetPos( hstmt, irow, fOption, fLock); } SQLRETURN SQL_API SQL::ExtendedFetch( SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLINTEGER irow, SQLUINTEGER *pcrow, SQLUSMALLINT *rgfRowStatus) { return m_pfnExtendedFetch( hstmt, fFetchType, irow, pcrow, rgfRowStatus); } SQLRETURN SQL_API SQL::FreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option) { return m_pfnFreeStmt(StatementHandle, Option); } SQLRETURN SQL_API SQL::ExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength) { return m_pfnExecDirect(StatementHandle, StatementText, TextLength); } SQLRETURN SQL_API SQL::SetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLUINTEGER Value) { return m_pfnSetStmtOption(StatementHandle, Option, Value); } SQLRETURN SQL_API SQL::BindCol(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLINTEGER BufferLength, SQLINTEGER *StrLen_or_Ind) { return m_pfnBindCol(StatementHandle, ColumnNumber, TargetType, TargetValue, BufferLength, StrLen_or_Ind); } SQLRETURN SQL_API SQL::Error(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle, SQLCHAR *Sqlstate, SQLINTEGER *NativeError, SQLCHAR *MessageText, SQLSMALLINT BufferLength, SQLSMALLINT *TextLength) { return m_pfnError(EnvironmentHandle, ConnectionHandle, StatementHandle, Sqlstate, NativeError, MessageText, BufferLength, TextLength); } SQLRETURN SQL_API SQL::AllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle) { return m_pfnAllocStmt(ConnectionHandle, StatementHandle); } SQLRETURN SQL_API SQL::FreeConnect(SQLHDBC ConnectionHandle) { return m_pfnFreeConnect(ConnectionHandle); } SQLRETURN SQL_API SQL::FreeEnv(SQLHENV EnvironmentHandle) { return m_pfnFreeEnv(EnvironmentHandle); } SQLRETURN SQL_API SQL::Disconnect(SQLHDBC ConnectionHandle) { return m_pfnDisconnect(ConnectionHandle); } SQLRETURN SQL_API SQL::Connect(SQLHDBC ConnectionHandle, SQLCHAR *ServerName, SQLSMALLINT NameLength1, SQLCHAR *UserName, SQLSMALLINT NameLength2, SQLCHAR *Authentication, SQLSMALLINT NameLength3) { return m_pfnConnect(ConnectionHandle, ServerName, NameLength1, UserName, NameLength2, Authentication, NameLength3); } SQLRETURN SQL_API SQL::AllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle) { return m_pfnAllocConnect(EnvironmentHandle, ConnectionHandle); } SQLRETURN SQL_API SQL::AllocEnv(SQLHENV *EnvironmentHandle) { return m_pfnAllocEnv(EnvironmentHandle); } SQLRETURN SQL_API SQL::SetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLUINTEGER Value) { return m_pfnSetConnectOption(ConnectionHandle, Option, Value); } SQLRETURN SQL_API SQL::Transact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLUSMALLINT CompletionType) { return m_pfnTransact(EnvironmentHandle, ConnectionHandle, CompletionType); } SQLRETURN SQL_API SQL::Fetch(SQLHSTMT StatementHandle) { return m_pfnFetch(StatementHandle); } SQLRETURN SQL_API SQL::Statistics(SQLHSTMT StatementHandle, SQLCHAR *CatalogName, SQLSMALLINT NameLength1, SQLCHAR *SchemaName, SQLSMALLINT NameLength2, SQLCHAR *TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Unique, SQLUSMALLINT Reserved) { return m_pfnStatistics(StatementHandle, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, Unique, Reserved); } SQLRETURN SQL_API SQL::DescribeCol(SQLHSTMT StatementHandle, SQLSMALLINT ColumnNumber, SQLCHAR * ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLengthPtr, SQLSMALLINT * DataTypePtr, SQLUINTEGER * ColumnSizePtr, SQLSMALLINT * DecimalDigitsPtr, SQLSMALLINT * NullablePtr) { return m_pfnDescribeCol(StatementHandle, ColumnNumber, ColumnName, BufferLength, NameLengthPtr, DataTypePtr, ColumnSizePtr, DecimalDigitsPtr, NullablePtr); }