你的机器的IP地址是否是自动获取的,如果是可能不容易连接上;
还有局域网设置内部DNS服务器了吗?如果没有也会有这样的问题;
再就是SQL2000服务器设置:连接超时值,并发连接最大数目限制;

解决方案 »

  1.   

    我们的IP是静态的,DNS服务器也是有的,SQL服务器上连接超时设置的是“无限期”,但程序访问时设置的是12秒,并发最大连接数目是200,现实运行中最多有10台机。
      

  2.   

    100M网12秒的超时还短吗?另外我忘了告诉大家一个现象:Debug版本代码如果不设断点按F5执行,在某些节点上会经常出现前面我提到的现象,即使当时超时已设为20秒;如果在连接数据库执行前设置一个断点,然后再执行,该错误就不会发生,还请高手们多指教。
      

  3.   

    if(szServer.GetLength() == 0) //如果未指定主服务器名,则从注册表中获取
    {
    szServer = GetSQLServerName(UTSQL_PRIMARY_SVR);
    if(szServer.GetLength() == 0)
    return -1;
    } CString datasource = _T("Provider=SQLOLEDB;SERVER=");
    datasource += szServer + _T(";DATABASE=") + szDb + _T(";UID=") + szUser + _T(";PWD=") + szPassword; try
    {
    m_pConn1.CreateInstance(__uuidof(Connection));
    m_pConn1->ConnectionTimeout = 12;
    m_pConn1->Mode = adModeReadWrite;
    // m_pConn1->Attributes = adXactCommitRetaining | adXactAbortRetaining; //不要自动开始事务,以方便函数内确定回滚距离
    // m_pConn1->BeginTrans();
    m_pConn1->Open(_bstr_t(datasource), "", "", -1);
    }
    catch (_com_error &e) 
    {
    if (m_pConn1 != NULL) m_pConn1.Release();
    m_szErrorDescription.Format("%s", (char*)e.Description());
    m_bIsDb1Open = FALSE;
    return -1;
    } try 
    {
    m_pCommand1.CreateInstance(__uuidof(Command));
    m_pCommand1->ActiveConnection = m_pConn1;
    m_pCommand1->CommandTimeout = 1000; m_pRS1.CreateInstance(__uuidof(Recordset));
    }
    catch (_com_error &e)
    {
    if(m_pCommand1 != NULL) m_pCommand1.Release();
    if(m_pRS1 != NULL) m_pRS1.Release();
    m_szErrorDescription.Format("%s", (char*)e.Description());
    m_bIsDb1Open = FALSE;
    return -2;
    } m_bIsDb1Open = TRUE; return 0;
      

  4.   

    m_pConn1->ConnectionTimeout = 1200;
      

  5.   

    m_pConn1->ConnectionTimeout = 1200;
    1200是不是毫秒呢?随便问一下。
      

  6.   

    到www.myvc.net 或www.easthot.net去看看,有你要的答案
      

  7.   

    killcat能不能告诉我详细一点的地址
      

  8.   

    你用DSN连接试试,我一直用没遇到什么问题。(要在ODBC里配置一下,我觉得DSN灵活性很好)