日期:2014-05-17  浏览次数:20513 次

Oracle.DataAccess 执行多条sql语句
业务需求最纠结的就是他导入的execl表可能是从数据库中导出来的,对其中部分数据做了修改或者添加了新数据,当客户导入这个execl的时候就会同时存在更新和插入的操作了,一般单次操作数量级在5000-10000条左右
我的实现是:
建立一张临时表B和正式表A,表结构一样,将数据插入B中,然后通过唯一标识了筛选出AB中同时存在的记录,在A表中删除之,然后将整个B表中的记录插入A表中,接着清空B表中的记录,整个过程在一个事务中进行
我其实是一条一条插入的
部分代码如下
list<string> SqlLst=new lst<string>
SqlLst.add("sql插入语句")
……
……
SqlLst.add("begin delete A where 存在的记录; insert into A select B;delete from B;end;");
然后开启事务,一条一条的跑,都能执行就提交事务,否则就回滚,取消操作
关键就是最后一条,有3条sql语句,这里就相当于执行多条sql语句了(加了分号啊,最烦这个了,为了保险,执行最后一条的时候我把\r\n这些杂七杂八的都去掉了)
开始用ado.net的时候如上方法能执行,皆大欢喜
现在vs从3.5换成4.0了,就用这个Oracle.DataAccess东东了,我都不晓得这是个什么东东,只是他们给俺说不用ado.net里的了,说这个东东要强力些
于是,我上面的语句就报错了,就是最后一句不通过
错误提示是:当前对象的状态不能……,省略号的内容忘记了,哎,俺第一次接触他就来个不友好的印象,是不是我那里没用对?

或者说这个方案本来就不可取?有没有更好的方法?求大大



------解决方案--------------------
建议

你可以直接上除正式表记录再插入
效果一样,为什么要建立临时表
你这个做法不见得就快