C#写一个查询并插入Oracle

来源:互联网 发布:淘宝客户回访话术 编辑:程序博客网 时间:2024/06/07 16:20
  有关数据的插入问题,因为项目上的需要,现在需要把旧库里的数据插入到新库里来,所以才不得不这样做。

本来是写了条这样的语句(INSERT INTO TABLE SELECT ........FROM TABLE2 ) 直接可以了事,这样做不可否认它是可行的。但又有一个问题在于,如果插入的时候 有巨大数量量,怎么办呢?再如果,我们在执行插入语句的时候,中途断了又如何预处理呢?等等。

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

 

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