刚问过这个问题 还不是很清楚。
  我想在某个表中保存一些参数,保存前需要判断该记录是否存在,如果不存在则插入一条记录,
  如果存在,则更新这条记录。
  表结构ExtrInfo如下  int varchar(50) varchar(50) varchar(50) varchar(50) varchar(50)
  Id   Header     SubItem1     SubItem2   SubItem3    SubItem4
    
   以前ADO的时候,直接用下面操作就可以了
  查询索引 sql="select * from extrainfo where header='标志'
  _RecordsetPtr pRst;
  pRst.CreateInstance(__uuidof(Recordset));
  pRst->Open((_variant_t)sql,_variant_t((IDispatch*)连接实例,true),adOpenStatic,adLockOptimistic,adCmdText);
  if(pRst->adoEOF)
      pRst->AddNew();
  pRst->PutCollect("Header",_variant_t(sFlag));
  pRst->PutCollect("SubItem1",_variant_t(str1));
  pRst->PutCollect("SubItem2",_variant_t(str2));
  pRst->PutCollect("SubItem3",_variant_t(str3));
  pRst->PutCollect("SubItem4",_variant_t(str4));
  pRst->Update();
  pRst->Close(); 我想也是用上面的方式 操作记录集,请问有什么办法??
 判断记录是否存在 不存在则插入能否一次操作数据就完成???
 谢谢

解决方案 »

  1.   

    数据库中使用is null ,不能使用=null
    程序中判断是不是等于Dbnull.value
      

  2.   

    可自己写sql语句解决
    if(exists(select * from ....))
    Update ......
    else Insert into ....
      

  3.   

    实体类ExtrInfo
    keys是数组,对应ExtrInfo中的主键
    update和insert可以采用动态映射,这样可以处理所有的Add操做了
    大概思路如下
    Add(ExtrInfo,keys)
    {
        if(exist(ExtrInfo,keys))
        {
            update(ExtrInfo,keys)
        }
        else
        {
            insert(ExtrInfo,keys)
        }
    }
      

  4.   


    倒是一种方法 我的意思是避免使用upodate或者insert 语句,
    因为如果参数很多的情况 就必须写很长的带参数的插入和更新语句。
    直接操作记录集,或者写一个通用的存储过程???