SQLRETURN SQLConnect(SQLHDBC conn, SQLCHAR* serverName, SQLSMALLINT serverNameLen, SQLCHAR* userName, SQLSMALLINT userNameLen, SQLCHAR* auth, SQLSMALLINT authLen) { using odbc::Connection; using odbc::config::Configuration; using utility::SqlStringToString; LOG_MSG("SQLConnect called\n"); Connection *connection = reinterpret_cast<Connection*>(conn); if (!connection) return SQL_INVALID_HANDLE; odbc::config::Configuration config; std::string dsn = SqlStringToString(serverName, serverNameLen); LOG_MSG("DSN: " << dsn); odbc::ReadDsnConfiguration(dsn.c_str(), config); connection->Establish(config); return connection->GetDiagnosticRecords().GetReturnCode(); }
SQLRETURN SQLDriverConnect(SQLHDBC conn, SQLHWND windowHandle, SQLCHAR* inConnectionString, SQLSMALLINT inConnectionStringLen, SQLCHAR* outConnectionString, SQLSMALLINT outConnectionStringBufferLen, SQLSMALLINT* outConnectionStringLen, SQLUSMALLINT driverCompletion) { using odbc::Connection; using odbc::diagnostic::DiagnosticRecordStorage; using utility::SqlStringToString; using utility::CopyStringToBuffer; UNREFERENCED_PARAMETER(windowHandle); LOG_MSG("SQLDriverConnect called"); if (inConnectionString) LOG_MSG("Connection String: [" << inConnectionString << "]"); Connection *connection = reinterpret_cast<Connection*>(conn); if (!connection) return SQL_INVALID_HANDLE; std::string connectStr = SqlStringToString(inConnectionString, inConnectionStringLen); odbc::config::Configuration config; config.FillFromConnectString(connectStr); std::string dsn = config.GetDsn(); if (!dsn.empty()) odbc::ReadDsnConfiguration(dsn.c_str(), config); connection->Establish(config); const DiagnosticRecordStorage& diag = connection->GetDiagnosticRecords(); if (!diag.IsSuccessful()) return diag.GetReturnCode(); size_t reslen = CopyStringToBuffer(connectStr, reinterpret_cast<char*>(outConnectionString), static_cast<size_t>(outConnectionStringBufferLen)); if (outConnectionStringLen) *outConnectionStringLen = static_cast<SQLSMALLINT>(reslen); if (outConnectionString) LOG_MSG(outConnectionString); return diag.GetReturnCode(); }