在開發ADO應用中,老是碰到很多莫名奇妙的錯誤,Idispatch error 3121就是其中一個,也查過網上的解決辦法,不太好用,所以寫出來大家共享一下,這個錯誤是在執行一條SQL命令超時時報的錯誤,不是指鏈接超時,在Connection對象裡有一個參數ConnectionTimeOut,它是指建數據庫鏈接時的超時,如執行
m_pConnection->ConnectionTimeOut = 15
m_pConnection->Open(newVal,"","",adConnectUnspecified)
如果超過15秒,還沒建立數據庫鏈接,就會出錯了。
也不是指連接空閒的時間,而是指執行SQL語句時的超時,它是通過CommandTimeout 屬性來控制的,缺省是30秒。就是如果執行SQL語句超過30秒還沒有取到結果就會出IDispatch error 3121錯誤。在網上見到有人把它這個參數設置成30000,其實不用那麼麻煩,如果你不想它超時設為0就可以了,它永不超時。例子如下
try
{
// Build DB Connection
HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection));
if(FAILED(hr)) return S_FALSE;
hr = m_pConnection->Open(newVal,"","",adConnectUnspecified);
if(SUCCEEDED(hr))
{
m_pConnection->CommandTimeout = 0;
m_pRs.CreateInstance(__uuidof(Recordset));
return S_OK;
}
else return S_FALSE;
}
catch(_com_error e) // Capture exceptions
{
GetErrorMsg(e.ErrorMessage());
return S_FALSE;
}
本文出自 “靜侯佳音” 博客,請務必保留此出處http://thomas.blog.51cto.com/177910/30587