⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lang_query.cpp

📁 ncbi源码
💻 CPP
字号:
/* * =========================================================================== * PRODUCTION $Log: lang_query.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 19:22:08  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3 * PRODUCTION * =========================================================================== *//* $Id: lang_query.cpp,v 1000.1 2004/06/01 19:22:08 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE                           *               National Center for Biotechnology Information *                                                                           *  This software/database is a "United States Government Work" under the    *  terms of the United States Copyright Act.  It was written as part of     *  the author's official duties as a United States Government employee and  *  thus cannot be copyrighted.  This software/database is freely available  *  to the public for use. The National Library of Medicine and the U.S.     *  Government have not placed any restriction on its use or reproduction.   *                                                                           *  Although all reasonable efforts have been taken to ensure the accuracy   *  and reliability of the software and data, the NLM and the U.S.           *  Government do not and cannot warrant the performance or results that     *  may be obtained by using this software or data. The NLM and the U.S.     *  Government disclaim all warranties, express or implied, including        *  warranties of performance, merchantability or fitness for any particular *  purpose.                                                                 *                                                                           *  Please cite the author in any work or product based on this material.    * * =========================================================================== * * Author:  Vladimir Soussov * * This simple program illustrates how to execute SQL statements * using one of available DBAPI drivers * */#include <ncbi_pch.hpp>#include <dbapi/driver/exception.hpp>#include <dbapi/driver/driver_mgr.hpp>USING_NCBI_SCOPE;static char* getParam(char tag, int argc, char* argv[], bool* flag= 0){    for(int i= 1; i < argc; i++) {        if(((*argv[i] == '-') || (*argv[i] == '/')) &&            (*(argv[i]+1) == tag)) { // tag found            if(flag)                *flag= true;            if(*(argv[i]+2) == '\0') { // tag is a separate arg                if(i == argc - 1)                    return 0;                if(*argv[i+1] != *argv[i])                    return argv[i+1];                else                    return 0;            }            else {                return argv[i]+2;            }        }    }    if(flag)        *flag= false;    return 0;}int main(int argc, char* argv[]){    string driver_name;    string server_name;    string user_name;    string passwd;    string query;    if(argc < 2) {        cout << argv[0]             << " [-d<driver_name>] [-S<server_name>]"             << " [-U<user_name>] [-P<password>] [-Q<query>]"             << endl;        return 0;    }    const char* p= getParam('S', argc, argv);    server_name= p? p : "MOZART";        p= getParam('d', argc, argv);    if (p) {        driver_name= p;    } else {        driver_name= (server_name.find("MSSQL") != NPOS)? "ftds" : "ctlib";    }    p= getParam('U', argc, argv);    user_name= p? p : "anyone";    p= getParam('P', argc, argv);    passwd= p? p : "allowed";    bool f;    p= getParam('Q', argc, argv, &f);    if(p) {        query= p;    }    else {        if(f) { // query is on stdin            cout << "query is on ctdin" << endl;            char c;            c= cin.get();            while(!cin.eof()) {                cout << c;                query+= c;                c= cin.get();            }            cout << endl;        }        if(query.empty())            query= "exec sp_who";    }        cout << "Run query: '" << query << "' on server " << server_name          << " using driver: " << driver_name << endl;    cout << "--------------------------------------------"         << "----------------------------"         << endl;        try {        C_DriverMgr drv_mgr;        string err_msg;        I_DriverContext* my_context= drv_mgr.GetDriverContext(driver_name,                                                              &err_msg);        if(!my_context) {            cout << "Can not load a driver " << driver_name << " ["                  << err_msg << "] " << endl;            return 1;        }                CDB_Connection* con =            my_context->Connect(server_name, user_name, passwd, 0);        CDB_LangCmd* lcmd = con->LangCmd(query);        lcmd->Send();            while (lcmd->HasMoreResults()) {            CDB_Result* r = lcmd->Result();            if (!r)                continue;                        if (r->ResultType() == eDB_RowResult) {                while (r->Fetch()) {                    cout << "<ROW>";                    for (unsigned int j = 0;  j < r->NofItems(); j++) {                        EDB_Type rt = r->ItemDataType(j);                        const char* iname= r->ItemName(j);                        if(iname == 0) iname= "";                        cout << '<' << iname << '>';                        if (rt == eDB_Char || rt == eDB_VarChar) {                            CDB_VarChar v;                            r->GetItem(&v);                            cout << (v.IsNULL()? "{NULL}" : v.Value());                        }                         else if (rt == eDB_Int ||                                 rt == eDB_SmallInt ||                                 rt == eDB_TinyInt) {                            CDB_Int v;                            r->GetItem(&v);                            if(v.IsNULL()) {                                cout << "{NULL}";                            }                            else {                                cout << v.Value();                            }                        }                         else if (rt == eDB_Float) {                            CDB_Float v;                            r->GetItem(&v);                            if(v.IsNULL()) {                                cout << "{NULL}";                            }                            else {                                cout << v.Value();                            }                        }                        else if(rt == eDB_Double) {                            CDB_Double v;                            r->GetItem(&v);                            if(v.IsNULL()) {                                cout << "{NULL}";                            }                            else {                                cout << v.Value();                            }                        }                        else if (rt == eDB_DateTime ||                                 rt == eDB_SmallDateTime) {                            CDB_DateTime v;                            r->GetItem(&v);                            if(v.IsNULL()) {                                cout << "{NULL}";                            }                            else {                                cout << v.Value().AsString();                            }                        }                        else if (rt == eDB_Numeric) {                            CDB_Numeric v;                            r->GetItem(&v);                            if(v.IsNULL()) {                                cout << "{NULL}";                            }                            else {                                cout << v.Value();                            }                        }                        else if (rt == eDB_Text) {                            CDB_Text v;                            r->GetItem(&v);                            cout << "{text (" << v.Size() << " bytes)}";                         }                        else if (rt == eDB_Image) {                            CDB_Image v;                            r->GetItem(&v);                            cout << "{image (" << v.Size() << " bytes)}";                         }                        else {                            r->SkipItem();                            cout << "{unprintable}";                        }                        cout << "</" << iname << '>';                    }                    cout << "</ROW>" << endl << endl;                }                delete r;            }        }        delete lcmd;        delete con;    } catch (CDB_Exception& e) {        CDB_UserHandler_Stream myExHandler(&cerr);                myExHandler.HandleIt(&e);        return 1;    }    return 0;}/* * =========================================================================== * $Log: lang_query.cpp,v $ * Revision 1000.1  2004/06/01 19:22:08  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3 * * Revision 1.3  2004/05/17 21:16:37  gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.2  2002/06/13 21:29:22  soussov * numeric added; double and float separated * * Revision 1.1  2002/06/13 19:43:07  vakatov * Initial revision * * =========================================================================== */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -