程序编译的Release版本在本机上运行正常,放置其它主机上就直接崩溃,已经查到是ConnectionTimeout语句出的问题,然后删除该语句也应该有一个默认的Timeout值 但是删除以后在其他主机上不管是什么Connect直接显示连接失败没有一点超时。 有木有大神来解决下啊~ HRESULT hr = m_ptrConnection.CreateInstance("ADODB.Connection");
if (FAILED(hr))
{
if (!FAILED(::CoInitialize(NULL)))
{
m_ptrConnection.CreateInstance("ADODB.Connection");
}
} CString strConnect;
strConnect.Format(_T(" Provider=SQLOLEDB.1; \
 Persist Security Info=True; \
 Data Source=%s; \
 Initial Catalog=%s; \
 User Id=%s; \
 Password=%s; "),
 strServerName,
 strDatabaseName,
 strLoginName,
 strPassword);
ADODB::_CommandPtr a;// 一下三句均崩溃
// m_ptrConnection->ConnectionTimeout = (long)5;
// m_ptrConnection->ConnectionTimeout = 5;
// m_ptrConnection->put_CommandTimeout(1L);
try
{
hr = m_ptrConnection->Open(_bstr_t(strConnect), "", "", 0);
}
catch (_com_error e)
{
return -1;
} if (FAILED(hr))
{
return -1;
}

解决方案 »

  1.   

    1. 检查你的连接字符串
    2. 检查你的数据库是否可以让其他机器访问。sqlserver2000是需要装补丁才能访问的
      

  2.   

    不会是 m_ptrConnection 为NULL了吧?
      

  3.   

    COM初始化是否成功了?如果失败就直接退出,不要运行了;不过一般不会失败;
      

  4.   

    本机上m_ptrConnection 不为NULL啊,为什么Release放到其它主机上就为NULL了呢?
      

  5.   

    其他机器有Sqlserver驱动程序吗?比如msado15.dll
      

  6.   

    DWORD dwLastError;
    HRESULT hr = m_ptrConnection.CreateInstance("ADODB.Connection");
    if (FAILED(hr))
    {
    if (!FAILED(::CoInitialize(NULL)))
    {
    dwLastError = m_ptrConnection.CreateInstance("ADODB.Connection");
    CString a;
    a.Format(_T("%x"),dwLastError);
    MessageBox(a);
    }
    }
    看看是多少google去~
      

  7.   

    应该是ADO版本的问题,m_ptrConnection.CreateInstance("ADODB.Connection");执行失败。
    需要安装补丁KB983246,在csdn资源里找找,xp vista win7的都有