1. 程式人生 > >VC++ 通過ADO連線資料庫查詢時返回空值報錯的解決方案

VC++ 通過ADO連線資料庫查詢時返回空值報錯的解決方案

當資料庫的欄位值允許為空時, 而且此時內容也為空時,則執行查詢會出錯,例如

CString str = pRecordset->GetFields()->GetItem((long)0)->GetValue();

或者

str= pRecordset->GetCollect("posInfo");   

會彈出如下視窗提示出錯!

     

更加奇怪的是  catch(...)也抓不到異常
今天碰著個問題算是頭弄大了  最後終於弄好了

報錯的原因:   在GetCollct返回了NULL之後   由於str是一個CString物件  編譯器自動將_varint_t轉換成CString  而此時_varint_t為空  因此轉換失敗  不是資料庫的異常 而且根本就不是異常 所以  catch(…)無法抓住。

解決方案 

在可能為空的地方,加入如下程式碼

 _variant_t var;
  var= m_pRecordset->GetCollect("posInfo");          //可能為空
 if(var.vt != VT_NULL)   //為NULL
 {
         strPosInfo = var;
  }
  else
 {
        strPosInfo = “”;
}

就可以檢測NULL值了