想通过ADO.net对一个数据库进行选择性的更新或添加记录比如如果执行select count(*) from mytable where id=myList.id查到了该条记录
就执行update mytable set number=number+1 where id=myList.id
否则就执行insert into mytable(id, number) values(myList.id, myList.number)其中myList是我在外部实现的一个ArrayList对象,所用的数据库是access
如何才能把这种选择性数据更新合并成一句语句啊,由于是用Ado.net实现,所以如果要通过select返回记录集再判断该执行update还是insert要多写好多步骤,而且开销也大,所以想请各位大大帮忙想想能不能合并成一句。

解决方案 »

  1.   

    可以先把数据库符合你数据集的记录delete掉,然后就可以把数据集全insert进去啦~~~
      

  2.   

    或者你写insert触发器来delete记录吧,这样所有的记录你都能一次性insert进去了
      

  3.   

    小弟不是太懂数据库操作,用存储过程的话怎么才能把外部的ArrayList对象中的数据传递给数据库呢,另外回vshake(冰壁迷宫)的回复,我是想把符合条件的记录中的number字段做累加处理,有时候甚至是update mytable set number=number+myList.number where id=myList.id
    如果删除那还怎么累加啊
      

  4.   

    string sql=update mytable set number=number+1 where id=myList.id 
    aaa=Command1.excute(sql);这个会返回值赋给aaa,判断aaa的值,决定是否执行insert
      

  5.   

    if not exists(select * from test where id=1) 
    insert into test(id, number) values(1, 1)
    else
    update test set number=number+1 where id=1
    //SQL
    string sql="if not exists(select * from test where id="+myList.id+") ";
    sql+="insert into test(id, number) values("+myList.id+","+ myList.number+") ";
    sql+="else ";
    sql+="update test set number=number+1 where id="+myList.id;
    //have a try
      

  6.   

    我用的是access,好象不能支持这种操作
      

  7.   

    如果不支持 那只能 一条条执行
    根据返回结果来执行下一条语句
    __
    另要说明 变量+上就行 参考我上次写的
    "select count(*) from mytable where id="+myList.id
      

  8.   

    对access数据库没有好办法
    楼主就用自己得办法吧什么?数据太多,开销太大?
    呵呵,那你还用access,用sqlServer或Oracle啊
      

  9.   

    - -,客户要求用access,原因很简单便宜- -