MS SQL Server error: Communication link failure?????
dwy 2000-08-11 12:21:00 诸位仁兄:
小弟在VC下编写有关MS SQL Server的程序,使用 CDatabase和 CRecord类,但数据库连接打开时间很长后,用CRecordset::open()的时候就会抛出异常,错误信息是“Communication link failure”;并且数据库中的tempdb的空间大小随程序运行时间的增加,也在逐渐减小。
但只要把我的程序重启(即重新建立数据库连接),则一切正常且tempdb的大小也恢复到分配给它的空间的水平。随着运行时间的增加,将还会出现以上错误,tempdb的大小也逐渐减小。
我把部分代码附在下面,若我的表诉不够清楚,可来信与我联系dwyzy@21cn.com.
many thanks.
####################################################################
DWORD WINAPI ThrdAlrmDisp(LPVOID lpPara)
{
CDatabase db;
BOOL bRtn;
// open atmdb.
try {
bRtn = db.OpenEx(_T("DSN=ipdb;DATABASE=atmdb;UID=sa;PWD=dbserver"), CDatabase::noOdbcDialog);
} catch (CDBException *pEx) {
pEx->Delete();
bRtn = FALSE;
}
if (!bRtn) {
alrm_disp_log("fail to connect to atmdb.\n");
WSACleanup();
ExitProcess(1);
}
。。。
analyse_alrm_rec(CDatabase& db, char *rec);
//[注]:ipdb是odbc数据源的名称;
//[注]:atmdb是数据库的名称;
}
void analyse_alrm_rec(CDatabase& db, char *rec)
{
char SQL[2048];
.....
构造SQL语句。。。
db.BeginTrans();
try {
db.ExecuteSQL(SQL);
} catch (CDBException *pEx) {
printf("fail to update correlated alarm, SQL:\n%s\n%s\n\n", SQL, pEx->m_strError);
pEx->Delete();
db.Rollback();
return;
}
db.CommitTrans();
return;
}
/*很简单的一段程序,我省略了一些细节,ThrdAlrmDisp(LPVOID lpPara)是一线程的入口。*/
again thanks.