vc+ado连接oracle数据库怎么老是出错

ysok 2003-03-14 01:17:26
我在vc下用ado连接oracle数据库,在打开表的时候总会得到数据类型不支持的错误信息,代码如下

_ConnectionPtr m_pConnect;
strConn="Provider=MSDAORA;Data Source=YS;User Id=atm;Password=atm";
m_pConnect->Open(_variant_t(strConn),"","",-1L);
这里没什么问题,但是当我试图用Recordset打开一个表时就出错了
如:
_RecordsetPtr m_pRecordset;
HRESULT hr;
hr=m_pRecordset->Open(_variant_t("select * from tablename"),_variant_t((IDispatch*)m_pConnect,true),adOpenDynamic,adLockOptimistic,adCmdText);
这时try块就捕获了一个异常,说什么数据类型不支持,怎么回事
...全文
137 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
52001314 2003-03-14
  • 打赏
  • 举报
回复


查找一下以前的帖子,有讨论这个问题的。我不懂,不敢乱发言。

以下是我曾看到的。
回复人: henrylu21(雨晨) ( ) 信誉:100 2001-4-26 16:25:00 得分:20


关键是使用ADO执行select时碰到blob字段要出错,所以得不到此字段的Field对象。

可以是一下下面的code:



_CommandPtr pCommand;

_ParameterPtr pParam1; //将要包含BLOB的参数

CString sQuery; //SQL语句

_variant_t vRecsAffected(0L);



_variant_t vNull; //填充用

vNull.vt = VT_ERROR;

vNull.scode = DISP_E_PARAMNOTFOUND;





sQuery.Format("INSERT INTO EMP_PHOTO VALUES ( '%s', 'bitmap', ? )", sEmpNo );



_RecordsetPtr pRs;

try

{

HRESULT hr = pCommand.CreateInstance(__uuidof(Command));

if(FAILED(hr)) throw("Unable to create Command object");



//得到command对象

pCommand->PutRefActiveConnection(m_pConnection);



//开始查询

pCommand->PutCommandText((LPCTSTR) sQuery);



//说明是sql语句查询

pCommand->PutCommandType(adCmdText);



//初始化parameter对象

hr = pParam1.CreateInstance(__uuidof(Parameter));

if (FAILED(hr)) throw ("Unable to create Parameter object");



//制造blob参数

pParam1 = pCommand->CreateParameter((LPCTSTR) "picture", adBinary, adParamInput, vBLOB.parray->rgsabound[0].cElements, vBLOB);



//将此参数加入command的参数集合

hr = pCommand->Parameters->Append(pParam1);

if (FAILED(hr)) throw ("Unable to append Parameter to Command Object");





hr = pCommand->Execute(&vRecsAffected, &vNull, adCmdText);

if (FAILED(hr)) throw ("Failed to insert BLOB into Database");

}

catch(_com_error &e)

{

DisplayError(e);

return 0;

}



表结构为:



id number(3),

imeage_type varchar2(20),

image blob.
ysok 2003-03-14
  • 打赏
  • 举报
回复
真是奇怪,我的表中有大对象类型blob时,打开表就出错,没有的话就没问题,为什么?
cool_ice 2003-03-14
  • 打赏
  • 举报
回复
1。首先我不认为你打开的方法是正确的,我建议修改如下
_bstr_t source("Driver=MSDAORA;Data Source=YS;");
_bstr_t user("admin");
_bstr_t pwd("");
try{
hr=m_connection.CreateInstance(_uuidof(Connection));
if(SUCCEEDED(hr))
hr=m_connection->Open(source,user,pwd,16);
else
MessageBox("Connection Error");
if(SUCCEEDED(hr))
hr=m_recordset.CreateInstance(_uuidof(Recordset));//创建实例(你好象没有这样!)
else
MessageBox("Open Error");
if(SUCCEEDED(hr))
m_fConnected=TRUE;
else
m_fConnected=FALSE;
}
catch(_com_error &e)
{
// MessageBox(e.ErrorMessage());
AfxMessageBox(e.Description());
m_fConnected=FALSE;
}
if(!m_fConnected)
MessageBox("ADO数据源初始化失败");
else
m_strSource=(const char*)source;
2.打开一个表
CString strQuery;
strQuery.Format("select * from %s",strTableName);
_bstr_t query=strQuery;
_bstr_t source=m_strSource;
try
{
hr=m_recordset->Open(query,_variant_t((IDispatch *)m_connection,true),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error &e)
{
//MessageBox(e.ErrorMessage());
AfxMessageBox(e.Description());
return FALSE;
}

4,011

社区成员

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

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