您的位置:首页 > 数据库 > Oracle

C#写一个查询并插入Oracle

2011-12-13 17:04 176 查看
有关数据的插入问题,因为项目上的需要,现在需要把旧库里的数据插入到新库里来,所以才不得不这样做。
本来是写了条这样的语句(INSERTINTOTABLESELECT........FROMTABLE2)直接可以了事,这样做不可否认它是可行的。但又有一个问题在于,如果插入的时候有巨大数量量,怎么办呢?再如果,我们在执行插入语句的时候,中途断了又如何预处理呢?等等。

鉴于上面的情况,小弟不得不写一个程序让它跑。不过,问题是10w的数据跑一跑是没问题,但如果是,1亿那就是个问题了。不说多了,现在把我的关键代码贴出来给大家看看,写的不好啊。

stringsql="selectt.*,t.rowidfromalarm_testtwhererownum<="+countall+"andid>="+alarmID;
解释一下这句代码的意思:selectt.*,t.rowid意思:rowid就是唯一标志记录物理位置的一个id并且将alarm_test这个表的全部信息查出来。from..指定数据源也就是表。where并是查询条件,rownum<="+....+"意思是查询出多少条数据出来,countall这个是一个int类型的变量,andid>="+alarmID;意为:查询出大于或等于这个id的全部数据。alarmID也是一个int类型的变量。
例如我要查询出1W条数据,ID从10开始sql语句便是:selectt.*,t.rowidfromalarm_testtwhererownum<=10000andid>=10;
那么我们又如何将这1W条数据分批插入到Oracle中去呢?我用的办法是写两个for循环来读取数据并插入数据,第一个for循环读取总行数,数据放在DataSet里所以为,for(inti=0;i<Set.Tables["alarm"].Rows.Count;i++)这取得我们查询出来的总数并且以它为for循环的条件。在它的下面还有一个for循环,是每次循环1000条数据并插入库里。
值得提一下的是:alarmID是从配置文件取出来的。
这就是我写的,效率不是很高但还算安全。出了问题之后,比如断电了,电脑出问题了,服务器出问题了。我们的alarmID就会自己写到配置文件去,下次打开的时候就直接从这个id开始取数据。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: