为何在连接数据库时死机?(非常、非常急,进来有分) 我使用ado连接到oracle数据库,当记录很多时就会死机(上十万条记录)。请高手指点可能出错的原因,还有解决方法。非常的急,谢谢指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不会吧,只连接?没有select吗,应该不会呀。是不是有死循环?跟踪一下 当然是有select,大概创建了8个记录集,其中的几个记录集在反复的开关(当然我在每打开一次之前都会判断是否打开,如果打开就先关闭)。我要查询的记录有很多,大概60万条。出现这样的问题是否是连接超时造成的?如果是用什么办法来解决?请高手们指点! ljq76(赶路人) 不会,应当是记录集的问题!请问有什么问题?麻烦讲得详细点 1 server 上的内存小,在工作时内存资源耗尽,产生错误的返回结果,造成死机2 返回结果太多,客护端资源耗尽或过多的使用虚拟内存,产生内存页错误,造成死机增加物理内存分 to xuefl66(xuefl66) :请说详细点,谢谢。 是增加机器的内存条,还是增加数据库的缓存?如何增加oracle的缓存? 觉得应该是该存储过程搜索到了太多的记录,而程序中处理不当,出现了死机,也有可能是存储过程编写不当,出现了死循环应该是程序一方出现问题,想想oracle是个大型数据库,几十万条记录根本不算多,不会是这方面有错 我在客户端用sql puls执行相同的sql语句大约需要一分多钟。现在我编了一个测试用的程序,用_ptrConnection的Execute来执行,这个语句就无法执行成功。这是为什么?提示说“用户当前的操作已取消”。 up up up up up up up up up up up up 我想用ado的分页功能来避免一次取出太多的记录数,应该能够有用。 to imzxr(雨点) : 能说得详细点吗? 我出问题的语句是:strCmdText1 = "SELECT COUNT(*) FROM v_tele_qfb WHERE iDhlb = 1";if (ptrRecordset->State == ADODB::adStateOpen){ ptrRecordset->Close();}ptrRecordset->Open((LPCTSTR)strCmdText1, _variant_t((IDispatch* )ptrConnection, true), adOpenStatic, adLockReadOnly, adCmdText);m_nTotal_u1 = ptrRecordset->Fields->GetItem("count(*)")->GetValue();执行这个语句就死机, catch(_com_error &e) { // Notify the user of errors if any. char strErr[255]; _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); sprintf(strErr,"Source3 : %s \n Description : %s\n", (LPCSTR)bstrSource,(LPCSTR)bstrDescription); #ifdef _DEBUG AfxMessageBox(strErr,MB_ICONEXCLAMATION); #endif //_DEBUG return -1; }抛出的错误为:ole db不支持所需的属性 我看错了抛出的错误为:odbc不支持所需的属性 strCmdText1 = "SELECT COUNT(*) AS ct FROM v_tele_qfb WHERE iDhlb = 1";//if (ptrRecordset->State == ADODB::adStateOpen){ ptrRecordset->Close();}ptrRecordset->Open((LPCTSTR)strCmdText1, _variant_t((IDispatch* )ptrConnection, true), adOpenStatic, adLockReadOnly, adCmdText);m_nTotal_u1 = ptrRecordset->Fields->GetItem("ct")->GetValue();// 首先你要获得记录数,不要使用count(*),这样会很慢,你可以使用count(字段A)来获得记录数;其次,我好像没有查到recordset的fields有getitem的方法,请把你的变量定义贴出来。 是ado的_RecordsetPtr对象.我的语句中v_tele_qfb是一个视图,我把视图改为表后就没有问题了,不知是什么原因?还有我在程序中没法使用Move语句,例如: ptrRecordset_u4_z->Move(25);但是改为语句: ptrRecordset_u4_z->MoveFirst(); for (int i4 = 1; i4 <= m_nCount_u4_z; i4++) { ptrRecordset_u4_z->MoveNext(); }就可以了,这是不是因为数据库本身有问题? 请问MFC的键盘消息如何组合呢? 大家帮我看看求这段GDI+所绘字符串的宽度代码,为什么没有实现,谢谢 局域网数据库链接的问题,sql server 大家给点建议 Access+ADO+SDI的问题,希望各位大哥大姐赐教! 獲取CPU信息的問題 关于异步事件WSAAsyncSelect的问题 急!!求助一统计位置关系的算法! ADO问题,数据集中没有记录,但无法返回,请大虾看看代码,谢了,小弟很急! 串口 高手赐教:dll中如何使用soket??(有分) UP有分!哪位大哥大姐知道Windows的打印机的SPOOL文件的格式?急!UP有分
是不是有死循环?
跟踪一下
我要查询的记录有很多,大概60万条。
出现这样的问题是否是连接超时造成的?如果是用什么办法来解决?请高手们指点!
不会,应当是记录集的问题!请问有什么问题?麻烦讲得详细点
2 返回结果太多,客护端资源耗尽或过多的使用虚拟内存,产生内存页错误,造成死机增加物理内存分
请说详细点,谢谢。
如何增加oracle的缓存?
能说得详细点吗?
strCmdText1 = "SELECT COUNT(*) FROM v_tele_qfb WHERE iDhlb = 1";
if (ptrRecordset->State == ADODB::adStateOpen)
{
ptrRecordset->Close();
}
ptrRecordset->Open((LPCTSTR)strCmdText1, _variant_t((IDispatch* )ptrConnection, true), adOpenStatic, adLockReadOnly, adCmdText);
m_nTotal_u1 = ptrRecordset->Fields->GetItem("count(*)")->GetValue();
执行这个语句就死机,
catch(_com_error &e)
{
// Notify the user of errors if any.
char strErr[255];
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
sprintf(strErr,"Source3 : %s \n Description : %s\n",
(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
#ifdef _DEBUG
AfxMessageBox(strErr,MB_ICONEXCLAMATION);
#endif //_DEBUG return -1;
}
抛出的错误为:ole db不支持所需的属性
抛出的错误为:odbc不支持所需的属性
if (ptrRecordset->State == ADODB::adStateOpen)
{
ptrRecordset->Close();
}
ptrRecordset->Open((LPCTSTR)strCmdText1, _variant_t((IDispatch* )ptrConnection, true), adOpenStatic, adLockReadOnly, adCmdText);
m_nTotal_u1 = ptrRecordset->Fields->GetItem("ct")->GetValue();//
我的语句中v_tele_qfb是一个视图,我把视图改为表后就没有问题了,不知是什么原因?
还有我在程序中没法使用Move语句,例如:
ptrRecordset_u4_z->Move(25);
但是改为语句:
ptrRecordset_u4_z->MoveFirst();
for (int i4 = 1; i4 <= m_nCount_u4_z; i4++)
{
ptrRecordset_u4_z->MoveNext();
}
就可以了,这是不是因为数据库本身有问题?