VC++ 通過ADO連線資料庫查詢時返回空值報錯的解決方案
阿新 • • 發佈:2019-02-03
當資料庫的欄位值允許為空時, 而且此時內容也為空時,則執行查詢會出錯,例如
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值了