最近第一次用Oracle做开发,以前用Ado方式做过MsSql,Access,Mysql,db2.都没有遇到这次这样变态的问题.
我是采用的Oracle的Oledb驱动.请大家看一下代码
try
{
TESTHR(m_pConnection.CreateInstance(__uuidof(Connection)));
m_pConnection->Open(Provider=OraOLEDB.Oracle;Data Source=a_localhost;User ID=SYSTEM;Password=manager","","",adModeUnknown);
char strSql[512];
sprintf(strSql, "select * from A");
_RecordsetPtr pRst("ADODB.Recordset");
pRst->Open(strSql, _variant_t((IDispatch *)m_pConnection,true),
adOpenStatic, adLockReadOnly, adCmdText);
if (!(pRst->EndOfFile)){
pRst->MoveFirst();
....
}
}
catch (_com_error &e) {
PrintErrorLog("CExpertSelSvr异常,异常信息:%s", e.ErrorMessage());
m_pConnection.Release();
return false;
}
catch (...) {
ErrorLog("CExpertSelSvr未知异常");
return false;
}当A表中没有数据时,可以执行下去.只要A表中有数据,在pRst->Open这里就会出现异常,而且不是ADO异常,是catch (...)捕获.请指点一下,我犯了什么低级错误???
我是采用的Oracle的Oledb驱动.请大家看一下代码
try
{
TESTHR(m_pConnection.CreateInstance(__uuidof(Connection)));
m_pConnection->Open(Provider=OraOLEDB.Oracle;Data Source=a_localhost;User ID=SYSTEM;Password=manager","","",adModeUnknown);
char strSql[512];
sprintf(strSql, "select * from A");
_RecordsetPtr pRst("ADODB.Recordset");
pRst->Open(strSql, _variant_t((IDispatch *)m_pConnection,true),
adOpenStatic, adLockReadOnly, adCmdText);
if (!(pRst->EndOfFile)){
pRst->MoveFirst();
....
}
}
catch (_com_error &e) {
PrintErrorLog("CExpertSelSvr异常,异常信息:%s", e.ErrorMessage());
m_pConnection.Release();
return false;
}
catch (...) {
ErrorLog("CExpertSelSvr未知异常");
return false;
}当A表中没有数据时,可以执行下去.只要A表中有数据,在pRst->Open这里就会出现异常,而且不是ADO异常,是catch (...)捕获.请指点一下,我犯了什么低级错误???
解决方案 »
- 请问这样以C写DLL可以吗?
- 有人看过360浏览器的界面吗,请问是用什么UI库开发的?
- win32Api不用creatwindow()函数怎样在绘制一个按钮??
- 如何解决CreateMHTMLBody 保存HTML 文件到MHT时本地图片不能被保存?
- 请问高人:我向另外一个进行窗口的Edit控件发送WM_TEXT消息,却写不进去内容,是怎么回事呢?
- 如何将保存的层次关系用TreeCtrl显示出来?
- 如何用 HTTP Post 文件给Web site 急急急急
- 应如何取得位图句柄?如何实现类似windows中的注释条?急!
- 求助:怎么样得到和旋转按钮相连的编辑框的值呢?
- 用vb怎么取得表名,列属性(string或是number等),怎么知道那个是关键字段
- 求救:tree控件的滚动条周围区域刷新有问题
- 如何将字符型转换为时间类型
adOpenKeyset,
adLockOptimistic,
adCmdText));
strSql,
_variant_t((IDispatch *)m_pConnection,true),
adOpenForwardOnly,
adLockReadOnly,
adCmdText);pRst->MoveFirst();//去掉,仅向前的游标不支持向前移动游标//不知道行不行,以前一直都这样用,没有出现什么问题
可读写,当前数据记录可自由移动,可看到新增记录ADLOCKREADONLY(=1)
缺省锁定类型,记录集是只读的,不能修改记录是否这个原因呢?
这两个一起用,那到底是只读呢,还是可读写?
楼主好像没用adOpenForwardOnly啊~
哦,我的意思是我以前用oracle这么组合游标类型和锁定类型,建议楼主业这么试试看看,可能意思没有表达清楚
Provider=OraOLEDB.Oracle.1;Data Source=服务名(别名);Server=IP地址
我一直用的这个。没问题
试了一下,果然是表的问题,建表的哥们儿是做java的,把所有表示日期时间的字段都做成了timestamp型.查了10g的资料才知道(居然9i的开发文档里不提,10g才有),timestamp是从9i才开始有的字段类型,如果想让ADO支持,需要把CursorLocation = adUseServer才可以.其实用Date型不就很好,问了建表的哥们儿,居然说以为Date型没法存时间,真想狠K他一顿,害我试了一个晚上!
支持!
sprintf(strSql, "select * from A");
_RecordsetPtr pRst("ADODB.Recordset");
pRst->Open(strSql, _variant_t((IDispatch *)m_pConnection,true),
adOpenStatic, adLockReadOnly, adCmdText);
?
用下面这段试下。
CString strSql= "select * from A";
_RecordsetPtr pRst("ADODB.Recordset");
pRst->Open(_variant_t(strSql), _variant_t((IDispatch *)m_pConnection,true),
adOpenStatic, adLockReadOnly, adCmdText);
strSql[512]?开这么大后面不都是null字符了。