Пример #1
0
int
CDemoeApp::Run(void)
{
    try {
        DBLB_INSTALL_DEFAULT();

        CODBCContext my_context;

        auto_ptr<CDB_Connection> con(my_context.Connect("msdev1",
                                                        "DBAPI_test",
                                                        "allowed",
                                                        0));

        auto_ptr<CDB_RPCCmd> rcmd(con->RPC("sp_who"));
        rcmd->Send();

        while (rcmd->HasMoreResults()) {
            auto_ptr<CDB_Result> r(rcmd->Result());
            if (!r.get())
                continue;

            if (r->ResultType() == eDB_RowResult) {
                while (r->Fetch()) {
                    for (unsigned int j = 0;  j < r->NofItems(); j++) {
                        EDB_Type rt = r->ItemDataType(j);
                        if (rt == eDB_Char || rt == eDB_VarChar) {
                            CDB_VarChar r_vc;
                            r->GetItem(&r_vc);
                            cout << r->ItemName(j) << ": "
                                 << (r_vc.IsNULL()? kEmptyStr : r_vc.Value())
                                 << " \t";
                        } else if (rt == eDB_Int ||
                                   rt == eDB_SmallInt ||
                                   rt == eDB_TinyInt) {
                            CDB_Int r_in;
                            r->GetItem(&r_in);
                            cout << r->ItemName(j) << ": " << r_in.Value() << ' ';
                        } else
                            r->SkipItem();
                    }
                    cout << endl;
                }
            }
        }
    } catch (CDB_Exception& e) {
        CDB_UserHandler_Stream myExHandler(&cerr);

        myExHandler.HandleIt(&e);
        return 1;
    } catch (const CException&) {
        return 1;
    }

    return 0;
}
Пример #2
0
int
CDemoApp::Run(void)
{
    const CArgs& args = GetArgs();

    // Get command-line arguments ...
    string ServerName = args["S"].AsString();
    string UserName   = args["U"].AsString();
    string Password   = args["P"].AsString();
    string Database   = args["D"].AsString();

    try {
        DBLB_INSTALL_DEFAULT();

        CMySQLContext my_context;
        unique_ptr<CDB_Connection> con(my_context.Connect(ServerName, UserName, Password, 0));

        // changing database
        con->SetDatabaseName(Database);
        cout << "Database changed" << endl;

        // creating table
        {
            unique_ptr<CDB_LangCmd>
                lcmd(con->LangCmd("create temporary table tmp_t1("
                                  "a int,"
                                  "b datetime,"
                                  "c varchar(100),"
                                  "d text,"
                                  "e double,"
                                  "bl BLOB)"
                                  ));
            lcmd->Send();
            cout << "Table created" << endl;
        }

        int nBlobSize = 0xffff;
        unique_ptr<char> buff( new char[nBlobSize]);

        // inserting data
        {
            char* p = buff.get();
            for( int i = 0; i < nBlobSize; i++)
                *(p++) = i;

            unique_ptr<CDB_LangCmd> tmp_cmd(con->LangCmd("tmp"));

            string sql = "insert into tmp_t1 values";
            sql += "(1, '2002-11-25 12:45:59', 'Hello, world', 'SOME TEXT', 3.1415, '";
            sql += reinterpret_cast<CMySQL_LangCmd*>(tmp_cmd.get())->EscapeString( buff.get(), nBlobSize);
            sql += ")";

            unique_ptr<CDB_LangCmd> lcmd(con->LangCmd(sql));
            lcmd->Send();
            cout << "Data inserted " << lcmd->RowCount() << " row(s) affected" << endl;
        }

        // selecting data
        {
            unique_ptr<CDB_LangCmd> lcmd(con->LangCmd("select * from tmp_t1"));
            lcmd->Send();
            while (lcmd->HasMoreResults()) {
                unique_ptr<CDB_Result> r(lcmd->Result());
                while (r->Fetch()) {
                    CDB_Int a;
                    CDB_DateTime b;
                    CDB_VarChar c;
                    CDB_VarChar d;
                    CDB_Double e;
                    CDB_Image blob;

                    r->GetItem(&a);
                    r->GetItem(&b);
                    r->GetItem(&c);
                    r->GetItem(&d);
                    r->GetItem(&e);
                    r->GetItem(&blob);

                    unique_ptr<char> buff2( new char[blob.Size()]);
                    blob.Read( buff2.get(), blob.Size());
                    int correct = memcmp( buff2.get(), buff.get(), nBlobSize);

                    cout
                        << "a=" << a.Value() << endl
                        << "b=" << b.Value().AsString() << endl
                        << "c=" << c.AsString() << endl
                        << "d=" << d.AsString() << endl
                        << "e=" << e.Value() << endl
                        << "blob size is " << nBlobSize << " blob data is "
                        << (!correct ? "correct" : "not correct") << endl;
                }
            }
        }

        // selecting data as strings
        {
            unique_ptr<CDB_LangCmd> lcmd(con->LangCmd("select * from tmp_t1"));
            lcmd->Send();
            while (lcmd->HasMoreResults()) {
                unique_ptr<CDB_Result> r(lcmd->Result());
                for(unsigned i = 0; i < r->NofItems(); ++i)
                    cout << "[" << r->ItemName(i) << "]";
                cout << endl;

                while (r->Fetch()) {
                    for(unsigned i = 0; i < r->NofItems(); ++i) {
                        CDB_VarChar field;
                        r->GetItem(&field);
                        if(! field.IsNULL())
                            cout << field.AsString() << endl;
                                else
                                    cout << "NULL\n";

                    }
                }
            }
        }
    } catch (CDB_Exception& e) {
        CDB_UserHandler_Stream myExHandler(&cerr);

        myExHandler.HandleIt(&e);
        return 1;
    } catch (const CException&) {
        return 1;
    }

    return 0;
}
Пример #3
0
int
CDemoApp::RunSample(void)
{
    IDataSource* data_source = NULL;

    try {
        DBLB_INSTALL_DEFAULT();

        CDriverManager& dm = CDriverManager::GetInstance();

#ifdef FTDS_IN_USE
        DBAPI_RegisterDriver_FTDS();
        data_source = dm.CreateDs("ftds");
#else
        DBAPI_RegisterDriver_CTLIB();
        data_source = dm.CreateDs("ctlib");
#endif


        unique_ptr<IConnection> conn(data_source->CreateConnection());
        conn->Connect(GetUserName(),
                      GetPassword(),
                      GetServerName()
                      );

        unique_ptr<ICallableStatement> auto_stmt(conn->GetCallableStatement("sp_databases"));
        // unique_ptr<ICallableStatement> auto_stmt(conn->GetCallableStatement("sp_who"));
        auto_stmt->Execute();

        while(auto_stmt->HasMoreResults()) {
            if(auto_stmt->HasRows()) {
                unique_ptr<IResultSet> rs(auto_stmt->GetResultSet());
                unique_ptr<const IResultSetMetaData> md(rs->GetMetaData());

                switch(rs->GetResultType()) {
                case eDB_RowResult:
                    while(rs->Next()) {
                        for (unsigned int j = 1; j <= rs->GetTotalColumns(); ++j) {
                            const CVariant& value(rs->GetVariant(j));
                            const EDB_Type rt(md->GetType(j));

                            if (rt == eDB_Char || rt == eDB_VarChar) {
                                cout << md->GetName(j) << ": "
                                     << (value.IsNull()? "" : value.GetString())
                                     << " \t";
                            } else if (rt == eDB_Int ||
                                       rt == eDB_SmallInt ||
                                       rt == eDB_TinyInt) {
                                cout << md->GetName(j) << ": " << value.GetInt8()
                                     << ' ';
                            }
                        }
                        cout << endl;
                    }
                    break;
                case eDB_ParamResult:
                    while(rs->Next()) {
                        // Retrieve parameter row
                    }
                    break;
                default:
                    break;
                }
            }
        }
    } catch (CDB_Exception& e) {
        CDB_UserHandler_Stream myExHandler(&cerr);

        myExHandler.HandleIt(&e);
        return 1;
    } catch (const CException&) {
        return 1;
    }

    return 0;
}