刚问过这个问题 还不是很清楚。
我想在某个表中保存一些参数,保存前需要判断该记录是否存在,如果不存在则插入一条记录,
如果存在,则更新这条记录。
表结构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(); 我想也是用上面的方式 操作记录集,请问有什么办法??
判断记录是否存在 不存在则插入能否一次操作数据就完成???
谢谢
我想在某个表中保存一些参数,保存前需要判断该记录是否存在,如果不存在则插入一条记录,
如果存在,则更新这条记录。
表结构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(); 我想也是用上面的方式 操作记录集,请问有什么办法??
判断记录是否存在 不存在则插入能否一次操作数据就完成???
谢谢
程序中判断是不是等于Dbnull.value
if(exists(select * from ....))
Update ......
else Insert into ....
keys是数组,对应ExtrInfo中的主键
update和insert可以采用动态映射,这样可以处理所有的Add操做了
大概思路如下
Add(ExtrInfo,keys)
{
if(exist(ExtrInfo,keys))
{
update(ExtrInfo,keys)
}
else
{
insert(ExtrInfo,keys)
}
}
倒是一种方法 我的意思是避免使用upodate或者insert 语句,
因为如果参数很多的情况 就必须写很长的带参数的插入和更新语句。
直接操作记录集,或者写一个通用的存储过程???