C#写一个查询并插入Oracle
2011-12-13 17:04
176 查看
有关数据的插入问题,因为项目上的需要,现在需要把旧库里的数据插入到新库里来,所以才不得不这样做。
本来是写了条这样的语句(INSERTINTOTABLESELECT........FROMTABLE2)直接可以了事,这样做不可否认它是可行的。但又有一个问题在于,如果插入的时候有巨大数量量,怎么办呢?再如果,我们在执行插入语句的时候,中途断了又如何预处理呢?等等。
鉴于上面的情况,小弟不得不写一个程序让它跑。不过,问题是10w的数据跑一跑是没问题,但如果是,1亿那就是个问题了。不说多了,现在把我的关键代码贴出来给大家看看,写的不好啊。
本来是写了条这样的语句(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开始取数据。
相关文章推荐
- oracle 查询到的记录插入一个新表中
- Oracle中把一个查询结果插入到一张表中
- 记录一下C#+Oracle批量插入的一个方法
- C#与Oracle插入或修改或查询时间的处理
- Oracle中把一个查询结果插入到一张表中
- oracle 往一个表中插入字段时需要另一个表的查询结果
- Oracle中把一个查询结果插入到一张表中
- Oracle查询一个表的数据插入到另一个表
- 一个C#(.NET)数据访问连接、查询、插入等操作的封装类
- oracle 插入一个从别处查询获得字段的值
- Oracle中把一个查询结果插入到一张表中
- 将查询出来的表数据修改一个或几个字段后,再插入到表中(oracle)
- oracle的sqlplus查询输出到一个文件
- 数学老师小y想写一个成绩查询系统,包含如下指令:1.insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score.2.find [name],表示查
- c#vs2015 一个文本框多字段模糊查询datagridview表数据
- 一个oracle从子节点向父节点查询的问题
- Oracle跨数据库查询并插入
- Oracle千万条记录插入与查询小结
- Oracle查询一个表的所有列名
- ORACLE SQL: 从一个表中查询数据插入另一个表中