ado连接oracle数据库6,关于ADO连接oracle数据库的有关问题

这篇博客讨论了在VC++环境中使用ADO连接Oracle数据库时遇到的问题,包括TNS错误和地址已被占用错误。作者通过分享代码片段展示了如何配置连接字符串,并尝试打开和执行查询。在执行过程中,错误交替出现,可能是由于连接配置或资源管理问题导致。博客还包含了错误处理和日志记录的部分,以帮助诊断和解决连接失败的情况。
摘要由CSDN通过智能技术生成

当前位置:我的异常网» VC/MFC » 关于ADO连接oracle数据库的有关问题

关于ADO连接oracle数据库的有关问题

www.myexceptions.net  网友分享于:2015-08-26  浏览:14次

关于ADO连接oracle数据库的问题

之前一直没有接触过VC,现在手头上调试一个用C++写的程序要连接数据库,用的是oracle9I的数据库客户端。

_ConnectionPtr pMyConnect=NULL;

_variant_t vtEmpty;

_bstr_t bstrCommand;

CString sQueryCommand;

_variant_t var;

int iCount;

_RecordsetPtr m_pRecordset;

m_pRecordset.CreateInstance(__uuidof(Recordset));

HRESULT hr=pMyConnect.CreateInstance(__uuidof(Connection));

if(FAILED(hr))

{

return -1;

}

_bstr_t strConnect="Provider=OraOLEDB.Oracle;DSN=uscmfgdb; uid=uscyr_user; pwd=useryr;";

//_bstr_t strConnect="Provider=MSDAORA;DSN=uscmfgdb; uid=uscyr_admin@uscmfgdb; pwd=adminuscyr;";//for test data

//connecting to the database server now:

sQueryCommand="select count(*) cnt from uscyr_admin.bin_desc where program_name='";

sQueryCommand+=sProgram;

sQueryCommand+="' and program_version='";

sQueryCommand+=sVersion;

sQueryCommand+="'";

bstrCommand=sQueryCommand;

iCount=-1;

try

{

pMyConnect->Open(strConnect,"","",NULL);

m_pRecordset->Open(bstrCommand, pMyConnect.GetInterfacePtr(), adOpenDynamic,adLockOptimistic, adCmdUnknown);

if(!m_pRecordset->EndOfFile)

{

var = m_pRecordset->GetCollect("cnt");

iCount=var.dblVal;

}

m_pRecordset->Close();

pMyConnect->Close();

}

catch (_com_error &e)

{

//AfxMessageBox(e.ErrorMessage());

_bstr_t aa=e.Description();

//_bstr_t aa=e.ErrorMessage();

CString sc=" ";

sc.Format("%s",FileName + "\n" +(LPCTSTR)aa+"\n");

WriteLog("text.txt",sc);

Result=1;

return false;

}

在头文件中我发现之前写这个程序的老人用的是

#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")

和现在在网上找到的ADO连接的代码似是非是,同时在用这种代码连接数据库时,有时正常,有时在执行pMyConnect->Open(strConnect,"","",NULL);会返回

TNS-12560: TNS:protocol adapter error和TNS-12542: TNS:address already in use这两种错误交替出现,在执行插入命令的时候也会出现同样的问题

bool CWaferSortDB::bInsertWaferSortBin(int &Result)

{

_ConnectionPtr pMyConnect=NULL;

_variant_t vtEmpty;

_bstr_t bstrCommand;

CString InsertCommand;

_variant_t var;

_RecordsetPtr m_pRecordset;

m_pRecordset.CreateInstance(__uuidof(Recordset));

//_bstr_t strConnect="Provider=MSDAORA;DSN=uscmfgdb; uid=uscyr_user; pwd=useryr;";

_bstr_t strConnect="Provider=MSDAORA;DSN=uscmfgdb; uid=uscyr_admin@uscmfgdb; pwd=adminuscyr;";//test for databace

InsertCommand="insert into uscyr_admin.wafer_bin_info values('";

InsertCommand+=sLot;

InsertCommand+="_";

InsertCommand+=sWafer;

InsertCommand+="',";

InsertCommand+=ssBin;

InsertCommand+=",";

InsertCommand+=shBin;

InsertCommand+=",";

InsertCommand+=sCount;

InsertCommand+=")";

Result=0;

try

{

HRESULT hr=pMyConnect.CreateInstance(__uuidof(Connection));

if(FAILED(hr))

{

//AfxMessageBox("Connect fail");

Result=1;

return false;

}

pMyConnect->Open(strConnect,"","",NULL);

bstrCommand=InsertCommand;

pMyConnect->Execute(bstrCommand,&vtEmpty, adCmdUnknown);

pMyConnect->Close();

}

catch (_com_error &e)

{

_bstr_t aa=e.Description();

CString sc=" ";

sc.Format("%s",FileName + "\n" +(LPCTSTR)aa+"\n");

if (MessageCount==0)

{

mailInfo.sendMail(FileName + "\n" + InsertCommand+"\n"+sc);

}

WriteLog("text.txt",sc);

Result=1;

//AfxMessageBox(InsertCommand);

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值