Vc+ADO,如何远程连接Oracle数据库??,不需要DSN的方式

kilnut 2005-04-27 05:02:41
Vc+ADO,如何远程连接Oracle数据库??,不需要DSN的方式.
...全文
1159 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2005-05-14
  • 打赏
  • 举报
回复
不装客户端VC我没试过
用BCB或DELPHI不装客户端,可用ODAC构件
我也用过将oracle的客户端部分打包,但只能用于ODBC或Microsoft OLE DB Provider for ORACLE
且不能用Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.222)(PORT = 1521)) )(CONNECT_DATA = (SID = sci)))\"那样的方式,只能用SQL*NET建好的别名,且目录,路径都是固定的,还有文件过大(约8M,没法mail)
建议你每台客户机都安装ORACLE客户端
若要打包,你可把oracle的客户端整个打包到你的安装程序中,可能会大一些,但是是最简单有效的方法
kilnut 2005-05-14
  • 打赏
  • 举报
回复
自己顶一下
kilnut 2005-05-08
  • 打赏
  • 举报
回复
自己顶一下
kilnut 2005-05-07
  • 打赏
  • 举报
回复
to keiy() :
不装oracle客户端不行吗?我没有装的
那么,你能给我个将oracle客户端和的程序一起打包的例子吗?xrongwu@hotmail.com
柯本 2005-05-01
  • 打赏
  • 举报
回复
2,3都与VC无关,它都oracle的命令,要进入cmd方式,然后执行

(前提是,oracle客户端已安装,且PATH中含oracle的执行文件路径)
kilnut 2005-04-29
  • 打赏
  • 举报
回复
to keiy() :你所说的

2.用tnsping (ora 8i前为tnsping80)
tnsping "(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.115)(PORT = 1521))"
检查oracle的服务是否存在
3.用sqlplus
sqlplus username/password@"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.115)(PORT = 1521)) )(CONNECT_DATA = (SID = ora8)))"
检查oracle的服务是否可以登录

是什么意思?是指m_sConn字符串重新构造吗??
柯本 2005-04-29
  • 打赏
  • 举报
回复
我试过,程序没问题
1.查com是否初始化
AfxOleInit( );
2.用tnsping (ora 8i前为tnsping80)
tnsping "(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.115)(PORT = 1521))"
检查oracle的服务是否存在
3.用sqlplus
sqlplus username/password@"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.115)(PORT = 1521)) )(CONNECT_DATA = (SID = ora8)))"
检查oracle的服务是否可以登录

bohut 2005-04-28
  • 打赏
  • 举报
回复
_ConnectionPtr m_pConn;
CString m_sConn="Provider=MSDAORA.1;Data Source=sode_192.168.3.9"; //使用
ms连接库,sode为SID,192.168.3.9为机器ip
m_pConn.CreateInstance("ADODB.Connection");
try
{
HRESULT hr=m_pConn->Open((_bstr_t)m_sConn,"sodeUser","sodePw",adConnectUnspecified);
if (FAILED(hr))
{
AfxMessageBox("不能连接数据库 source!");
return FALSE;
}
}
catch(_com_error e)
{
AfxMessageBox("不能打开数据库 error!");
return FALSE;
}
kilnut 2005-04-28
  • 打赏
  • 举报
回复

以下是我的代码,从界面输入用户名称,密码,IP,数据库名称,结果连不上.是什么原因阿
void CTestOracleDlg::OnButton2()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strUID =m_strUID;
CString strPWD=m_strPW;
CString strDB=m_strDB;
BYTE nField0,nField1, nField2, nField3 ;
CString strIP;

m_IP.GetAddress(nField0,nField1,nField2,nField3 );
strIP.Format("%d.%d.%d.%d",nField0,nField1, nField2, nField3);

CString m_sConn;//="Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=True;User ID=test;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.115)(PORT = 1521)) )(CONNECT_DATA = (SID = ora8)))\"";
m_sConn.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 = 1521)) )(CONNECT_DATA = (SID = %s)))\"",strPWD,strUID,strIP,strDB);
TRACE("%s\n",m_sConn);
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
m_pConnection->ConnectionTimeout = 8;
TRACE("%s\n",m_sConn);
try{

HRESULT hr= m_pConnection->Open(_bstr_t(LPCTSTR(m_sConn)),_bstr_t(LPCTSTR(strUID)),_bstr_t(LPCTSTR(strPWD)),adModeUnknown);///连接数据库
if (FAILED(hr))
{
AfxMessageBox("不能连接数据库!");
return ;
}
else
AfxMessageBox("连接数据库成功!");
}
catch(_com_error e)
{
AfxMessageBox("不能打开数据库!");
return ;
}

}
柯本 2005-04-28
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3960/3960591.xml?temp=.1609308
那里有一段代码,只要把Provider改一下就可

另外\不可以去掉,因为它是为了一对",在C中,字串中的"要加\
内存泄漏 2005-04-28
  • 打赏
  • 举报
回复
“\”这个东西你去掉也没有关系的。。
kilnut 2005-04-28
  • 打赏
  • 举报
回复
to keiy() :
能不能给我个代码段啊?因为连接方式很多,我确认Open其他参数怎么设。还有上面“Data Source=\”的“\”指数据库名称吗??
柯本 2005-04-28
  • 打赏
  • 举报
回复
我也试过bohut(伯虎)的方法,不能成功,出现ora-12154:TNS:could not resolve service name
内存泄漏 2005-04-28
  • 打赏
  • 举报
回复
keiy() 说的方法是正确的,这样写的话就不用在ORACLE客户端里面配置数据源也能访问数据库了。
kilnut 2005-04-28
  • 打赏
  • 举报
回复
to bohut(伯虎):
请问sode为SID是什么?数据库名称?我以下是否可以?另外如果远程连接是SQL Server2000的
话,有什么需要改动?一并问你了,谢谢
strDatabase="sode_192.168.3.9";
//构造连接字符串
strConnect = _T("Provider=MSDAORA.1;Data Source=")+strDatabase+(";UID=")+strUID+(";PWD=") + strPWD;
g_pRConnection.CreateInstance(__uuidof(Connection));
g_pRConnection->ConnectionTimeout = 8;
g_pRConnection->Open(_bstr_t(LPCTSTR(strConnect)),"","",adModeUnknown);
柯本 2005-04-28
  • 打赏
  • 举报
回复
这样的连接串可以,我试用通过:
CString m_sConn="Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=True;User ID=test;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.115)(PORT = 1521)) )(CONNECT_DATA = (SID = ora8)))\"";
meteor108 2005-04-28
  • 打赏
  • 举报
回复
BOOL CDataTrans2Dlg::SetADOEnv()
{
CString szLocalConn="Provider=MSDAORA.1;User ID=user_name;Password=user_pass;Data Source=database_name";
pConnection=0;
pConnection.CreateInstance("ADODB.Connection");
//pConnection->ConnectionTimeout = 10;
DispLog("connect oracle...");
try
{
HRESULT hr = pConnection->Open((_bstr_t)szLocalConn, "", "", adConnectUnspecified);
if (FAILED(hr))
{
DispLog("connect failed...");
return FALSE;
}
}
catch(_com_error e)
{
CString temp;
temp.Format("connect failed:%s", e.ErrorMessage());
DispLog(temp);
return false;
}
//GetDlgItem(IDC_CLEAR)->EnableWindow(TRUE);
DispLog("connect successful...");
return true;
}
oyljerry 2005-04-28
  • 打赏
  • 举报
回复
就是连接字符串中Provider用MSDAORA

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧