以下函数在执行时出现“连接占线导致另一个hsmt"的错误,不知道什么原因?pr是一个_RecordsetPtr对象,此函数每次连续执行1000次。因为是在用户与服务端建立网络连接时提取一千条记录发送给用户。请各位大哥帮帮忙,困扰了一个月了。数据库用的sql server2000void CMySocket::ReturnMsg()
{
box *p=new box;
try
{
if(!pr->adoEOF)
{
COleDateTime t1;
long itemid,userid,state;
short infotype,hyclass;
CString content,dateandtime,phone,username;
_variant_t  vitemid,vcontent,vtime,vphone,vuserid,vinfotype,vhyclass,vname,vstate;

vitemid=pr->GetCollect("id"); 
vuserid=pr->GetCollect("user_id");
vhyclass=pr->GetCollect("hyuser_class");
vinfotype=pr->GetCollect("info_type");
vcontent=pr->GetCollect("content"); 
vtime=pr->GetCollect("dateandtime"); 
vphone=pr->GetCollect("phone");
vname=pr->GetCollect("username"); 
vstate=pr->GetCollect("state"); 
t1=vtime; itemid=vitemid.iVal;
userid=vuserid.iVal;
infotype=vinfotype.iVal;
hyclass=vhyclass.iVal;
state=vstate.iVal;  content=vcontent.bstrVal;
username=vname.bstrVal;
username.TrimRight(); 
phone=vphone.bstrVal;
dateandtime=t1.Format("20%y-%m-%d %H:%M:%S");



CString sql1;
sql1.Format("(%d,%d,%d,'%s',#%s#,'%s','%s',%d,%d)",userid,hyclass,infotype,content,dateandtime,phone,username,itemid,state);
          p->length=sql1.GetLength();
strcpy(p->re,sql1); 
 
p->boxtype=9;
this->Send(p,sizeof(box)); 
Remain_Data--;
pr->MoveNext();    
}
else
{
// if(pr->State) pr->Close();
SendNotify();
SendLeaveWords();
} }
catch(_com_error error)
{
        CString errorMessage;
        errorMessage.Format("%s",(LPTSTR)error.Description());
        AfxMessageBox("返回信息错误");
AfxMessageBox(errorMessage);
}
}

解决方案 »

  1.   

    pconn->Open("driver={SQL Server};Server=wysc;DATABASE=mainbase;UID=wyscnetadmin;PWD=admin3005","","",adModeUnknown);
      

  2.   

    char sql[1000]; try
    {
    strcpy(sql,sqlparam);
    if(pr->State)pr->Close();  
    pr->Open(sql,_variant_t((IDispatch *)pconn,true),adOpenStatic,adLockOptimistic,adCmdText); 
    Remain_Data=pr->GetRecordCount(); 
    if(Remain_Data>0)
    {
    box *p=new box;
    p->boxtype=10;
    this->Send(p,sizeof(box)); 
    }
            
    } catch(_com_error error)
    {
            CString errorMessage;
            errorMessage.Format("%s",(LPTSTR)error.Description());
            AfxMessageBox("获得新消息错误");
    AfxMessageBox(errorMessage);
    }
      

  3.   

    试试:
    pr->Open(sql,_variant_t((IDispatch *)pconn,true),adOpenDynamic,adLockOptimistic,adCmdText);
      

  4.   

    哦说明一下每个网络连接都有自己的_RecordsetPtr互相之间不干扰,但共享一个_ConnectionPtr多个用户可能同时登录
      

  5.   

    如果可能的话,请将代码发至[email protected]
    数据库的备份也一起发过来,希望能帮到你。
      

  6.   

    bohut老兄,邮件我已经发了,请验收,麻烦您了,万分感谢。