在装了数据库的机器上可以通过连接语句
"Provider=OraOLEDB.Oracle; Password = 123;Persist Security Info=True;User ID= 123;Data Source=orcl" 连接成功;
然后通过局域网在另一台机器上连就死活不成功,连接语句是
"Provider=OraOLEDB.Oracle; Password = 123;Persist Security Info=True;User ID=123;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.116)(PORT = 1521)) )(CONNECT_DATA = (SID = orcl)))\""请问这个连接语句该怎么写?

解决方案 »

  1.   

     m_pConnection.CreateInstance("ADODB.Connection");
       // 设置连接字符串,必须是BSTR型或者_bstr_t类型
    sprintf(str_con,"Provider=OraOLEDB.Oracle.1;User ID=%s;Password=%s;"
        "Data Source='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)"
        "(HOST=%s)(PORT=1521)))(CONNECT_DATA=(SID=%s)))'",CFG.db_user,CFG.db_pwd,CFG.dbIP,CFG.SID);/××××××××××××××××××××××××××××××CFG.db_user:登录远程oracle数据库的用户名CFG.db_pwd: 登录远程oracle数据库的密码CFG.dbIP: 远程oracle数据库主机ipCFG.SID:远程oracle数据库SID
      

  2.   

    ADO连接oracle 数据库,还是用udl吧;具体 连接的函数:这个比较方便;
    /*************************************************************************
     ** 函数说明: 初始化数据库连接
     ** 参数说明: --
     ** 返回说明: 连接成功 -- True; 连接失败 -- False
     *************************************************************************/
    BOOL InitDBConn()
    {
    BOOL bRet = TRUE;
    try
    {
    // 初始化Connection指针
    g_pDBConn.CreateInstance(_uuidof(Connection));
    g_pDBConn->ConnectionString = "File Name=.\\DBConn.udl";  
    g_pDBConn->Open("","","",NULL); g_pRecordset.CreateInstance("ADODB.Recordset");
    }
    catch(_com_error e)
    {
    CString errormessage;
    errormessage.Format("连接数据库失败!\r\n错误信息:%s\r\n",e.ErrorMessage());
    printf((char*)(LPCTSTR)errormessage);
    g_LogFile.Write("数据库连接", (char*)(LPCTSTR)errormessage);
    g_pRecordset = NULL;
    g_pDBConn = NULL;
    bRet = FALSE;
    }

    return bRet;
    }
      

  3.   

    建议使用otlv4。如果使用ADO技术连接oracle,我以前在现场就发现如果频繁操作oracle,会使oracle内存增加,关闭oracle归档也没有。
      

  4.   

    // 远程已经连接成功,那么可以创建一个udl文件,打开udl文件,创建连接,然后用记事本打开udl文件,copy出连接字符串
      

  5.   

    感谢各位,连接成功了,但是问题却是莫名其妙
    我把
    m_pConnection.CreateInstance(“ADODB.Connection”);
    改为
    m_pConnection.CreateInstance(__uuidof(Connection));
    就对了,不知道为什么,这两个不是一样的吗?