Title: Re: [msvc] Connect to Oracle Database

As a suggestion.. Use the Micosoft's ODBD Driver for Oracle... For some
reason??? Oracle's drive doesn't like cercent things.. espeically when it
comes to select data in a long raw (blob) field..

Anyway.. Here how I open a database connection and login an ODBC data
source... And this does work with ever version of oracle that I have tested
with.. 7.3 to 9i


bool Database::OpenDatabase(char *DSN, char *UserID, char *Password)
    {
    bool Status = false;

    try
        {
        strcpy((char *)this->DSN, DSN);
        strcpy((char *)this->UserID, UserID);
        strcpy((char *)this->Password, Password);

        rc = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
        if (rc == SQL_SUCCESS OR rc == SQL_SUCCESS_WITH_INFO)
            {
            rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
(SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
            if (rc == SQL_SUCCESS OR rc == SQL_SUCCESS_WITH_INFO)
                {
                Status = Login();
                if (Status == false)
                    CloseDatabase();
                }
            else
                {
                DBError("OpenDatabase: SQLSetEnvAttr");
                CloseDatabase();
                }
            }
        else
            DBError("OpenDatabase: SQLAllocHandle: SQL_HANDLE_ENV");
        }
    catch(...)
        {
        Status = false;
        DBError("OpenDatabase: Exception Caught");
        CloseDatabase();
        }

    return (Status);
    }

//************************************************************************

void Database::CloseDatabase(void)
    {
    try
        {
        if (hdbc)
            {
            SQLDisconnect(hdbc);
            SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
            hdbc = NULL;
            }

        if (henv)
            {
            SQLFreeHandle(SQL_HANDLE_ENV, henv);
            henv = NULL;
            }
        }
    catch(...)
        {
        DBError("CloseDatabase: Exception Caught");
        }
    }

//************************************************************************

bool Database::Login(void)
    {
    bool Status = false;
    char DBType[128];

    try
        {
        rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
        if (rc == SQL_SUCCESS OR rc == SQL_SUCCESS_WITH_INFO)
            {
            rc = SQLConnect(hdbc,
                            DSN, (SWORD)strlen((char *)DSN),
                            UserID, (SWORD)strlen((char *)UserID),
                            Password, (SWORD)strlen((char *)Password));

            if (rc == SQL_SUCCESS OR rc == SQL_SUCCESS_WITH_INFO)
                {
                LoggedIn = true;

                rc = SQLGetInfo(hdbc, SQL_DBMS_NAME, &DBType,
sizeof(DBType), NULL);
                if (rc == SQL_SUCCESS OR rc == SQL_SUCCESS_WITH_INFO)
                    {
                    if (strcmp(DBType, "Microsoft SQL Server") == 0)
                        {
                        DBMSType = dbMS_SQL;
                        strcpy(SQL_QuilifierPre, "[");
                        strcpy(SQL_QuilifierPost, "]");
                        }
                    else if (strcmp(DBType, "Oracle") == 0)
                        {
                        DBMSType = dbOracle;
                        strcpy(SQL_QuilifierPre, "\"");
                        strcpy(SQL_QuilifierPost, "\"");
                        SetOracleDateTimeFormat("MM/DD/YYYY HH:MI:SSAM");
                        }
                    else
                        {
                        DBMSType = dbUnknown;
                        strcpy(SQL_QuilifierPre, "");
                        strcpy(SQL_QuilifierPost, "");
                        }
                    Status = true;
                    }
                else
                    DBError("Login: SQLGetInfo");
                }
            else
                {
                SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
                hdbc = NULL;
                DBError("Login: SQLConnect");
                }
            }
        else
            DBError("Login: SQLAllocHandle");
        }
    catch(...)
        {
        Status = false;
        DBError("Login: Exception Caught");
        }

    return (Status);
    }

//************************************************************************

bool Database::Logout(void)
    {
    bool Status = false;

    try
        {
        if (hdbc)
            {
            SQLDisconnect(hdbc);
            SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
            hdbc = NULL;
            LoggedIn = false;
            Status = true;
            }
        }
    catch(...)
        {
        Status = false;
        DBError("Logout: Exception Caught");
        }

    return (Status);
    }

//************************************************************************


----- Original Message -----
From: "Adam Welch" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED] hread.zl6
Sent: Wednesday, September 24, 2003 10:57 AM
Subject: Re: [msvc] Connect to Oracle Database


> That's a good question. I would like to connect through the Microsoft ODBC
> Driver for Oracle. I am developing the application on an XP Machine. The
> Oracle Database is not on my machine, but a different server. I have the
> Oracle Client installed on my machine, but I was told, it was a better
idea
> to use Microsoft's ODBC Driver. I'm not really sure as to which connection
> string to use. Would it help to see the tnsnames.orl file?
>
>
>
>
> ----- Original Message -----
> From: "wfryatt" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED] hread.zl6
> Sent: Wednesday, September 24, 2003 11:35 AM
> Subject: Re: [msvc] Connect to Oracle Database
>
>
> > How are you trying to connect? via ODBC or Oracles OCI interface?
> >
> > ----- Original Message -----
> > From: "Adam Welch" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED] hread.zl6
> > Sent: Wednesday, September 24, 2003 10:22 AM
> > Subject: [msvc] Connect to Oracle Database
> >
> >
> > > Is there anyone out there with good knowledge of VC++ and connecting
to
> an
> > > Oracle database. I am having some problems. If there are, please
respond
> > > ASAP and I will let you know more. Thanks!
> > >
> > > Adam - N.Y.
> > >
> >
>

Reply via email to