刚开始接触数据库,有几个问题,我想自己写个程序去连接oracle服务端,思路是怎样的?C++语言,有没有免费的oracle服务端让我去连接试试,网络协议TCP,给个例子代码最好,简单的查询就行,主要是步骤,oracle客户端是啥玩意?安装它有什么用?是不是就是一个现成的连接服务端的程序
 贴代码给高分,解决问题给高分

解决方案 »

  1.   

    用C++连接Oracle服务端,需要用OCI接口函数,下面一大段是连接的步骤:
    sword connection::connect(const char* username, const char* password,
      const char* server, const int mode)
    {
    char msg[128];
    if(_state == connected) return 0;

    if (OCIInitialize(OCI_DEFAULT, (dvoid *)0,
    0,
    0,
    0 ))
    {
    sprintf(msg,"OCIInitialize() error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

    if (OCIEnvInit(&_envhp, (ub4) OCI_DEFAULT,
                   (size_t) 0, (dvoid **) 0 ))
    {
    sprintf(msg,"OCIEnvInit() error.");
    tool.DealInfo(INFO,msg,0);
       return OCI_ERROR;
    }

    /* Allocate a service handle */
    if (OCIHandleAlloc((dvoid *) _envhp, (dvoid **) &_svchp,
    (ub4) OCI_HTYPE_SVCCTX, (size_t) 0, (dvoid **) 0))
    {
    sprintf(msg,"OCIHandleAlloc svchp error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

        /* Allocate an error handle */
    if (OCIHandleAlloc((dvoid *) _envhp, (dvoid **) &_errhp,
    (ub4) OCI_HTYPE_ERROR, (size_t) 0, (dvoid **) 0))
    {
    sprintf(msg,"OCIHandleAlloc errhp error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

    /* Allocate a server handle */
    if (OCIHandleAlloc((dvoid *) _envhp, (dvoid **) &_srvhp,
    (ub4) OCI_HTYPE_SERVER, (size_t) 0, (dvoid **) 0))
    {
    sprintf(msg,"OCIHandleAlloc srvhp error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

    /* Allocate a authentication handle */
    if (OCIHandleAlloc((dvoid *) _envhp, (dvoid **) &_authp,
    (ub4) OCI_HTYPE_SESSION, (size_t) 0, (dvoid **) 0))
    {
    sprintf(msg,"OCIHandleAlloc authp error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

    if (OCIServerAttach(_srvhp, _errhp, (text *) server,
    (sb4) strlen((char *)server), (ub4) OCI_DEFAULT))
    {
    sprintf(msg,"OCIServerAttach error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

    if (OCIAttrSet((dvoid *) _svchp, (ub4) OCI_HTYPE_SVCCTX,
    (dvoid *) _srvhp, (ub4) 0, (ub4) OCI_ATTR_SERVER, _errhp))
    {
    sprintf(msg,"OCIAttrSet error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }


    /* Set Attribute in the authentication handle */
    if (OCIAttrSet((dvoid *) _authp, (ub4) OCI_HTYPE_SESSION,
    (dvoid *) username, (ub4) strlen((char *) username),
    (ub4) OCI_ATTR_USERNAME, _errhp))
    {
    sprintf(msg,"OCIAttrSet username error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

    if (OCIAttrSet((dvoid *) _authp, (ub4) OCI_HTYPE_SESSION,
    (dvoid *) password, (ub4) strlen((char *) password),
    (ub4) OCI_ATTR_PASSWORD, _errhp))
    {
    sprintf(msg,"OCIAttrSet password error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

    if (OCISessionBegin(_svchp, _errhp, _authp, OCI_CRED_RDBMS, mode))
    {
    sprintf(msg,"OCISessionBegin error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

    /* Set the authentication handle in the Service handle */
    if (OCIAttrSet((dvoid *) _svchp, (ub4) OCI_HTYPE_SVCCTX,
    (dvoid *) _authp, (ub4) 0, (ub4) OCI_ATTR_SESSION, _errhp))
    {
    sprintf(msg,"OCIAttrSet _svchp, _authp error.");
    tool.DealInfo(INFO,msg,0);
    return OCI_ERROR;
    }

    _state = connected;
    return OCI_SUCCESS;
    }
      

  2.   

    在你要运行你的c程序的主机上安装oracle客户端软件(安装oraccle服务器软件也可以),配置好tns服务名,连接远程数据库服务器测试通过后,开始写代码测试,可以用oci接口,也有proc c/c++:
    oci的例子你可以看看这个:
    http://www.orafaq.com/wiki/Oracle_Call_Interfaces
      

  3.   

    写个程序去连接oracle服务端,思路是怎样的?(简单的查询就行)
    那就使用OCI或Proc * C++就好了。oracle客户端是啥玩意?
    安装它有什么用?就是一个现成的连接服务端的程序
      

  4.   

    我要是用ADO连接一个远程oracle服务器,该怎么办?
      

  5.   

    learning ,thank you !!!
      

  6.   

    数据库是存储数据用的。。
    除非你是程序只是那种Socket的服务端和客户端,来回发送接收消息的,勉强可以不用数据库。
    现在的程序一般情况都要用到数据库的:比如说客户办理了哪些业务,客户的帐户口令信息。。等等。
    不用数据库,怎么能称为系统呢。