您的位置:首页 > 数据库

使用odbc访问数据库

2008-11-12 13:50 387 查看
int main()
{
    SQLRETURN   retCode;
    SQLHANDLE   henv;
    SQLHDBC     hdbc;

    DWORD       dwError = 0;

    retCode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);  
    if ( (retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO) )
    {
        dwError = GetLastError();

        cout << "SQLAllocHandle error = " << dwError << endl;

        return 0;
    }

    retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
    if ( (retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO) )
    {
        dwError = GetLastError();

        cout << "SQLSetEnvAttr error = " << dwError << endl;

        return 0;
    }

    retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    if ( (retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO) )
    {
        dwError = GetLastError();

        cout << "SQLAllocHandle error = " << dwError << endl;

        return 0;
    }

    retCode = ::SQLConnect(hdbc, (SQLCHAR*)"mysqlconnect", SQL_NTS, (SQLCHAR*)"root", SQL_NTS, (SQLCHAR*)"root", SQL_NTS);
    if ( (retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO) )
    {
        dwError = GetLastError();

        cout << "SQLConnectA error = " << dwError << endl;

        return 0;
    }

    SQLHSTMT hstmt;

    retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
    if ( (retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO) )
    {
        dwError = GetLastError();

        cout << "SQLAllocHandle error = " << dwError << endl;

        return 0;
    }

    string strSQL = "select * from Student;";

    retCode = SQLExecDirectA(hstmt, (SQLCHAR*)strSQL.c_str(), SQL_NTS);
    if ( (retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO) )
    {
        dwError = GetLastError();

        cout << "SQLExecDirectA error = " << dwError << endl;

        return 0;
    }

    SQLCHAR     szName[10]  = "/0";
    SQLCHAR     szClass[10] = "/0";
    SQLCHAR     szPasswd[20]    = "/0";

    SQLINTEGER  dwSid = 0;

    int     nResult = 0;
    int     i   = 0;

    while (true)
    {
        retCode = SQLFetch(hstmt);
        if (retCode == SQL_ERROR)
        {
            return 0;
        }   
        else if (retCode == SQL_NO_DATA)
        {
            break;
        }
        else
        {       
            SQLGetData(hstmt, 1, SQL_INTEGER, &dwSid, 8, (SQLINTEGER*)&nResult);
            SQLGetData(hstmt, 2, SQL_CHAR, szName, 10, (SQLINTEGER*)&nResult);
            SQLGetData(hstmt, 3, SQL_CHAR, szClass, 10, (SQLINTEGER*)&nResult);
            SQLGetData(hstmt, 4, SQL_CHAR, szPasswd, 16, (SQLINTEGER*)&nResult);

            cout << "------------ information for record: " << i << " -------------" << endl;
            cout << "sid = " << dwSid << endl;
            cout << "sname = " << szName << endl;
            cout << "sclass = " << szClass << endl;
            cout << "szPasswd = " << szPasswd << endl;
            cout << "-----------------------------------------------------" << endl << endl;

            i++;
        }
    }

    SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
    SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV, henv);

    return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: