ADO返回的结果集中空值的处理???

LuoQS1 2002-03-20 04:01:49
ADO返回的结果集中有一些记录的一些字段有空值(NULL),有一些非空值,对于空值用GetCollent("name");结构弹出一个异常出来。不知各位如何先判断空值的 ????????
...全文
125 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmoth 2002-03-20
  • 打赏
  • 举报
回复
try{
//...
value=rst->GetCollect("szItem");
//...
}
catch(...)
{
//你的处理
}
LuoQS1 2002-03-20
  • 打赏
  • 举报
回复
对不起大家了,搞了半天原来是我把字段名写错了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cmoth 2002-03-20
  • 打赏
  • 举报
回复
可以用异常处理,加上自己的控制。
LuoQS1 2002-03-20
  • 打赏
  • 举报
回复
先谢谢 EetyChen(三刀主) ,我再去试一下
EetyChen 2002-03-20
  • 打赏
  • 举报
回复
我已经用过多少遍啦,上面的不会出问题的了!
EetyChen 2002-03-20
  • 打赏
  • 举报
回复
LuoQS1:
_variant_t value;
value=rst->GetCollect("szItem");
if((value.vt!=VT_NULL) && (value.vt!=VT_EMPTY))
{
//do your works
}
LuoQS1 2002-03-20
  • 打赏
  • 举报
回复
好像无论用什么函数都对于空字段都会报错,不知各位高手如何处理这个问题
LuoQS1 2002-03-20
  • 打赏
  • 举报
回复
to strip(阿飞):
_variant_t vValue = m_pRs->Fields->Item["fld1"]->Value;这句话如果当fld1字段为空时程序报出一个Unknow Error的错误出来。fld1字段为非空时才可以的也就是说你根本就取不到值,不知这样避免这个问题的


LuoQS1 2002-03-20
  • 打赏
  • 举报
回复
to strip(阿飞):
_variant_t vValue = m_pRs->Fields->Item["fld1"]->Value;这句话如果当fld1字段为空时程序报出一个Unknow Error的错误出来。fld1字段为非空时才可以的,不知这样避免这个问题的
strip 2002-03-20
  • 打赏
  • 举报
回复
#include <conio.h>
#define PAUSE printf("\npress any key to exit"); getch();

#define _WIN32_DCOM

#pragma warning(push)
#pragma warning(disable:4146)
#import "c:\program files\common files\system\ado\MSADO15.DLL" no_namespace rename("EOF", "EndOfFile")
#pragma warning(pop)

int main(int argc, char* argv[])
{
_ConnectionPtr m_pConn;
_RecordsetPtr m_pRs;
CoInitializeEx(NULL, COINIT_MULTITHREADED);
_bstr_t bstrConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\\db1.mdb;" ;
_bstr_t bstrSQL = "create table lll( aaa int )";
try{
m_pConn.CreateInstance( __uuidof(Connection) );
m_pRs.CreateInstance( __uuidof(Recordset) );
m_pConn->Open( bstrConnStr, "", "", adConnectUnspecified );
// m_pConn->Execute( bstrSQL, NULL, adExecuteNoRecords);
m_pRs->Open( "select * from table1",
m_pConn.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);

m_pRs->MoveFirst();
long lColumn = m_pRs->Fields->Count;
for( long i=0; i<lColumn; i++ )
{
printf("%-12s", (char*)m_pRs->Fields->Item[i]->Name );
}
_variant_t vValue = m_pRs->Fields->Item["fld1"]->Value;
if( vValue.vt == VT_NULL ) // <----------------------
printf( "\n(null)" );
else
printf( "\nok " );
//
// while( ! m_pRs->EndOfFile )
// {
// printf("\n");
// for( long i=0; i<lColumn; i++ )
// {
// _variant_t vValue = m_pRs->Fields->Item[i]->Value;
// if( vValue.vt == VT_NULL )
// printf( "%-12s", "(null)" );
// else
// printf( "%-12s", "ok" );
// }
// m_pRs->MoveNext();
// }
m_pRs->Close();
m_pConn->Close();
}catch( _com_error e )
{
printf( "\n%s Error: %ld\r\n"
"%s\r\n"
"%s\r\n",
(char*)e.Source(),
e.Error(),
(char*)e.Description(),
(char*)e.ErrorMessage() );
m_pRs->Close();
m_pConn->Close();
}
CoUninitialize();
PAUSE;
return 0;
}
nichang 2002-03-20
  • 打赏
  • 举报
回复
使用_variant_t取回字段值判断是否为VT_NULL即可

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧