VC6.0在多线程中读写数据库会不会导致报错runtime error 我用VC6.0开发了一个程序,里面需要开两个线程对sqlserver数据库中的同一个表进行读、写和删除,程序运行一段时间后会弹出错误对话框Microsoft Visual C++ Runtime Library,提示Runtime Error!程序名 abnormal program termination这个错误是不是同时操作同一个表导致的?怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 补充一下,我是用ADO操作的数据库,最好有高人给个代码参考一下子啊 同一个表进行写和删除?应该要加个锁或者临界区来进行线程同步吧,还有就是,操作数据库,一般都用异常捕捉try..catch吧 如果是通过不同的COM对象访问,不需要,数据库自己会做并发保护。如果是同一个COM对象,这是不行的,因为COM对象不能跨套间使用,如果lz使用同一个connection做,他必须首先做marshal/unmarshal,然后也许要考虑并发控制问题。在我看来,他应该每次创建新对象访问数据库 我是用了两个connection,两个线程分开用的,这样会不会有问题啊? 线程会不会访问同一个全局数据等,这样需要加锁保护...然后多添加Log等,先定位大概出错的位置,分析 runtime err 还是自己的代码不够健壮. 没把异常判断处理. 所以exe就异常了. 可能数据集关闭了还在读,各种可能就很多了~加try...catch...捕获一下异常吧~具体问题具体分析,需要精确定位才好查错~try{//code}catch (_com_error& e){AfxMessageBox(e.Description());} 也遇到了类似的问题!MFC+ACCESS ADO编程,程序在DEBUG和RELEASE下编译、链接、运行都正常,但是打包安装到另外的计算机上,运行到数据库部分就出现问题,程序如下:CoInitialize(NULL);_ConnectionPtr pConn(__uuidof(Connection));_RecordsetPtr pRst(__uuidof(Recordset)); try{ pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= database.mdb","","",adConnectUnspecified);//!!!!错误位置}catch (_com_error* e){ MessageBox("数据库链接失败!请检查配置文件!"); return;}catch (CException* e){ MessageBox("中断!"); e->Delete();} CString str;str.Empty();str="select data1 from table1 where probe='1111'";try{pRst=pConn->Execute((_bstr_t)str,NULL,adCmdText);}catch (_com_error *e){MessageBox("未找到对应型号!请检查探头型号!");return;} pRst->MoveFirst();while (!pRst->rsEOF){ double dd; dd=pRst->GetCollect("data1"); CString str; str.Format("%.12f",dd); MessageBox(str); pRst->MoveNext();} pRst->Close();pConn->Close();pRst.Release();pConn.Release();CoUninitialize();注:#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","rsEOF")在头文件已经声明本人估计是数据库路径定义问题,不知是应该定义绝对路径,还是相对路径? 如何播放透明背景的AVI文件 串口通信问题,怎么向串口发送16进制的字符串压 这个网络游戏怎么玩不了? 高人请进,菜鸟莫入:如何替换系统正在占用的一个DLL vc+ado+oracle9i问题,侠之大者,为国为民,庆诸位大虾教一招 呜~~~~~~哇~~~~~~~(大家帮我解决问题) 报表打印及生成!!!!!!!!!!1 有关弹出菜单的疑惑? VirtualQueryEx被拒绝访问,高手来 使用Dll是不是一定要注册? VS 2010 MFC单文档右键弹出菜单求助 我做了一个仪表盘程序,我只想改其中一个地方的字体背景颜色,该怎么改呢?
然后多添加Log等,先定位大概出错的位置,分析
加try...catch...捕获一下异常吧~具体问题具体分析,需要精确定位才好查错~
try
{
//code
}
catch (_com_error& e)
{
AfxMessageBox(e.Description());
}
MFC+ACCESS ADO编程,程序在DEBUG和RELEASE下编译、链接、运行都正常,但是打包安装到另外的计算机上,运行到数据库部分就出现问题,程序如下:
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
try
{
pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= database.mdb","","",adConnectUnspecified);//!!!!错误位置
}
catch (_com_error* e)
{
MessageBox("数据库链接失败!请检查配置文件!");
return;
}
catch (CException* e)
{
MessageBox("中断!");
e->Delete();
}
CString str;
str.Empty();
str="select data1 from table1 where probe='1111'";
try
{
pRst=pConn->Execute((_bstr_t)str,NULL,adCmdText);
}
catch (_com_error *e)
{
MessageBox("未找到对应型号!请检查探头型号!");
return;
}
pRst->MoveFirst();
while (!pRst->rsEOF)
{
double dd;
dd=pRst->GetCollect("data1");
CString str;
str.Format("%.12f",dd);
MessageBox(str);
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();注:#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","rsEOF")在头文件已经声明本人估计是数据库路径定义问题,不知是应该定义绝对路径,还是相对路径?