首先,不管用什么方法我觉把10万条数据一起取出来在处理不太合适,可以一次处理少量数据,如1000条,第二次才处理1001到2000条,以此类推。
或者同时启动过个线程,每个线程负责1000条,这样应该可以快些。
@会长: 起动100个线程和启动1个线程的比反而慢..因为数据库插入是在一个事务中的
@56180825: 你说的对
使用CYQ.Data+ODP.NET方式,10万条数据,操作也就是N秒的时间,很快的。
类似代码:
MDatatable table=null;
using(MAction action=new MAction("表名A"))
{table=action.Select();}
foreache(MDatarow row in table.Rows)
{对数据进行修改。}
table.TableName="表名B";
table.AcceptChanged(Op.InsertWithID);
搞定。
用存储过程吧!!不过就是太定向了,不通用,也不好扩展,只能定向写。
如果只导入一次,用存储过程比较合适。
也可通过sqldatareader 以只读的方式迁移数据。(减少内存占用) , 这种方式还是会卡死, 因此将这个过程放在非主线程中做.
OracleBulkCopy.
public void WriteToServer( OracleConnection oracleConnection, string qualifiedDBName, DataTable dataTable ) { try { using ( OracleBulkCopy bulkCopy = new OracleBulkCopy( oracleConnection ) ) { bulkCopy.DestinationTableName = qualifiedDBName; bulkCopy.WriteToServer( dataTable ); } } catch ( Exception exc ) { LogException( exc, MethodBase.GetCurrentMethod( ) ); throw; } }
可以直接写存储过程吧,也能处理你的需求。如果需求不是很复杂,建议直接将原表查处来直接写入新的表。
select from #table1 into #table2