首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

ADO 開發實戰:解決 IDispatch Error 3121 命令逾時錯誤

     編輯:關於C語言

錯誤現場

使用 ADO 執行 SQL 命令時,若超過預設 30 秒仍未回傳結果,即會拋出 IDispatch error 3121。注意:這不是連線逾時(ConnectionTimeout),也非連線閒置逾時,純粹是命令執行逾時。

關鍵屬性:CommandTimeout

  • 所屬物件:Connection 或 Command
  • 預設值:30 秒
  • 設為 0 代表永不逾時(比網傳設 30000 更簡潔)

修正程式碼範例

try
{
    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;
    }
    return S_FALSE;
}
catch (_com_error e)
{
    GetErrorMsg(e.ErrorMessage());
    return S_FALSE;
}

補充說明

  • ConnectionTimeout(預設 15 秒)僅控制建立連線階段。
  • 長時間執行的複雜查詢、大量資料異動、資料庫鎖定等情境極易觸發此錯誤。
  • 生產環境建議視業務需求設定合理秒數,而非直接設 0,以防失控查詢佔用資源。

來源:「靜侯佳音」博客,原文連結:https://thomas.blog.51cto.com/177910/30587。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved