另一台服务器:61.111.111.2
成都创新互联专注于企业全网营销推广、网站重做改版、南皮网站定制设计、自适应品牌网站建设、H5高端网站建设、成都做商城网站、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为南皮等各大城市提供网站开发制作服务。
这台没有装ORACLE的,直接放网页文件来连接
这个就是你的网页连接数据库失败的原因
在服务器61.111.111.2上安装oracle,然后开启oracle监听,并打开oracle
net
manage配置本地服务,新建net服务指向
61.111.111.1服务器上的oracle数据库的服务名,如果是用ado连接,需要配置dns指向服务器61.111.111.2上的数据库服务名,并且驱动设置为:Provider=OraOLEDB.Oracle。
如此一来你的程序在61.111.111.2上连接61.111.111.1的oracle数据库就会正常了
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
vc++连接oracle数据库,可以使用OCI或者是OCL库,推荐使用OCL。OCI基于C语言,可以跨平台。OCL对OCI进行了封装,适用C++,面向对象的思想,且可跨平台。使用OCL库需有OCI库的支持,我有些资料和OCI、OCL类库,还有一些demo,可以传给你。
VC++连接远程Oracle数据库
1.如果主机A要连接远程主机B的oracle数据库,那么主机A和主机B都要安装oracle数据库,否则会提示找不到安装程序异常(或者主机A安装oralce客户端程序),主机B要配置数据库本地网络服务名和监听程序,用于对外网络开放本地数据库网络服务和监听远程程序通过网络连接本地数据库。
2.oracle数据库中用到的3个配置程序:Database Configuration Assistant 用于配置oracle数据库,如果安装过程中数据库配置或者安装出错,可以直接删除数据库重新配置不用卸载软件重新安装;Net Configuration Assistant用于配置本机数据库网络监听程序和数据库网络服务名,如果连接提示无法识别提供的sid等错误,可以直接删除监听程序重新配置并同时删除本地网络服务名重新配置;Net Manager用于查看Net Configuration Assistant中配置的本地网络服务名和监听程序;1个数据库连接与操作程序:SQL Plus用于连接数据并实现数据系统配置与数据操作。
3.常用命名:cmd中输入lsnrctl status用于查看当前数据库网络服务与监听程序状态,如果听见程序为BLOCKED状态则远程无法连接,正常为READY状态;如果连接不上远程数据库,可以通过此命令查看服务是否开启;oracle数据库插入时间日期,使用to_date('2013-07-05 23:56:25’, 'yyyy-mm-dd hh24:mi:ss’),设置系统时间日期显示格式:alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’。
4.oracle 11g标准版vc++连接字符串:
strConnect.Format("Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;\
Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = %s)) )(CONNECT_DATA = (SID = %s)))\"",
m_sPwd, m_sUid, m_sHost, m_sPort, m_sSid);//123456 system 192.168.37,1521(默认端口),testdata(本地网络服务配置服务名)
try
{
::CoInitialize(NULL);//初始化com环境(必须,否则提示异常)
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection-ConnectionTimeout = 10;// 设置连接超时10秒
m_pConnection-Open(_bstr_t(LPCTSTR(strConnect)),"","",adModeUnknown);
m_pConnection-CursorLocation = adUseClient;//设置使用客户端连接(可以共享读写)
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
//AfxMessageBox(e.ErrorMessage());
return FALSE;
}
catch(...)
{
MessageBox("数据库连接失败!", "未知原因", MB_OK|MB_ICONERROR);
return FALSE;
}
这个例子里用户名和密码都是pzone 数据库名是zp
改成你想要的就行了
import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
// 初始化COM,创建ADO连接等操作
AfxOleInit();
连接:
m_pConnection.CreateInstance(__uuidof(Connection));
try //建立数据库连接
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection-Open("Provider=OraOLEDB.Oracle.1;Password=pzone;User ID=pzone;Data Source=zp;Persist Security Info=True","","",adModeUnknown);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("数据库连接失败!\r\n错误信息:%s", e.ErrorMessage());
AfxMessageBox(errormessage);
//return FALSE;
}
查
_bstr_t sql="select name from booktype";
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset-Open(sql, m_pConnection-GetConnectionString(),adOpenStatic,adLockOptimistic,adCmdText);
if(!m_pRecordset-BOF)//判断表内数据是否为空
m_pRecordset-MoveFirst();
else{
AfxMessageBox("BookType表内数据为空");
return;
}
while(!m_pRecordset-adoEOF){
CString item=m_pRecordset-GetCollect("name");
m_pRecordset-MoveNext();
}
m_pRecordset-Close();
增加:
_bstr_t sql="insert into tablename values (".....;
m_pConnection-Execute(sql,NULL,adCmdText);
删除
_bstr_t sql="delete from tablename where ...";
m_pConnection-Execute(sql,NULL,adCmdText);
改
_bstr_t sql="update tablename set xx=...";
m_pConnection-Execute(sql,NULL,adCmdText);
首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它既可。可以直接在Stdafx.h文件中加入下面语句来实现:
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
其中路径名可以根据自己系统安装的ADO支持文件的路径来自行设定。当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵数LoadTypeLib()。#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。语句no_namespace说明ADO对象不使用命名空间,rename ("EOF", "adoEOF")说明将ADO中结束标志EOF改为adoEOF,以避免和其它库中命名相冲突。
其次,在程序初始过程中需要初始化组件,一般可以用CoInitialize(NULL);来实现,这种方法在结束时要关闭初始化的COM,可以用下面语句CoUnInitialize();来实现。在MFC中还可以采用另一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM的操作,语句如下所示: AfxOleInit();
接着,就可以直接使用ADO的操作了。我们经常使用的只是前面用#import语句引用类型库时,生成的包装类.tlh中声明的智能指针中的三个,它们分别是_ConnectionPtr、_RecordsetPtr和_CommandPtr。下面分别对它们的使用方法进行介绍:
1、_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句(用法和_CommandPtr中的Execute方法类似)。
——打开一个库连接。先创建一个实例指针,再用Open打开一个库连接,它将返回一个IUnknown的自动化接口指针。代码如下所示:
_ConnectionPtr m_pConnection;
// 初始化COM,创建ADO连接等操作
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
// 打开本地Access库Demo.mdb
m_pConnection-Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
——关闭一个库连接。如果连接状态有效,则用Close方法关闭它并赋于它空值。代码如下所示:
if(m_pConnection-State)
m_pConnection-Close();
m_pConnection= NULL;