Oracle数据库学习小结(三)---大数据批量插入bulkcopy
2016-05-26 09:50
405 查看
上篇文章中说到要跟大家聊聊bulkcopy这个的用法,今天我们就来了解一下这个用法。在之前我们写程序的时候如果遇到需要往数据库中插入数据你会怎么办?可能第一反应是加个循环一条一条插入呗,如果我们的数据仅仅是几十条或者几百条完全没有问题,循环使用add对数据库的性能消耗也不是特别大,但是万一数据量特别特别大,5位数以上的数据怎么办,难道还是要循环插入吗?那样就太耗费性能了。
SqlBulkCopy和OracleBulkCopy都是存在的,只是应用的数据库不同。
SqlBulkCopy在.NET Framework 2.0之后的版本中就可以使用了,它位于程序集System.Data中(System.Data.dll中),使用时需要引用System.Data.SqlClient.SqlBulkCopy;其中它的写入方法WriteToServer()支持多种重载,其中包括DataRow[]、DataTable、DbDataReader和IDbDataReader等等。给大家一个链接:SqlBulkCopy学习网站
OracleBulkCopy在.NET Framework 1.0及其以后的版本就可以使用,如果你使用的是PL/SQL的话需要11G版本之后才可以使用,它位于程序集Oracle.DataAccess中(Oracle.DataAccess.dll中),使用是需要引用Oracle.DataAccess.Client,同样它的写入方法WriteToServer()也支持那些参数。给大家一个链接:OracleBulkCopy学习网站
我们如果需要大批量的导入数据时可以考虑使用这个方法。下面给大家一个OracleBulkcopy的C#代码,仅供大家参考:
小编当时使用的环境是PL/SQL 11G版本,1W条数据也就2秒就完事了,特别快,网上有人说bulkcopy能达到4000条/秒,比较可靠。
网上关于BulkCopy的使用方法挺多的,感兴趣的可以搜一下。
当然了大数据的保存方法不仅仅只有这一种方法,下篇文章将给大家介绍另一种方法,通过拼接插入语句来批量操作。
SqlBulkCopy和OracleBulkCopy都是存在的,只是应用的数据库不同。
SqlBulkCopy在.NET Framework 2.0之后的版本中就可以使用了,它位于程序集System.Data中(System.Data.dll中),使用时需要引用System.Data.SqlClient.SqlBulkCopy;其中它的写入方法WriteToServer()支持多种重载,其中包括DataRow[]、DataTable、DbDataReader和IDbDataReader等等。给大家一个链接:SqlBulkCopy学习网站
OracleBulkCopy在.NET Framework 1.0及其以后的版本就可以使用,如果你使用的是PL/SQL的话需要11G版本之后才可以使用,它位于程序集Oracle.DataAccess中(Oracle.DataAccess.dll中),使用是需要引用Oracle.DataAccess.Client,同样它的写入方法WriteToServer()也支持那些参数。给大家一个链接:OracleBulkCopy学习网站
我们如果需要大批量的导入数据时可以考虑使用这个方法。下面给大家一个OracleBulkcopy的C#代码,仅供大家参考:
public static void BulkToDB(DataTable dt, string targetTable) { string err = "大批量插入时产生错误"; OracleConnection conn = new OracleConnection(conStr); //System.Data.OracleClient.OracleConnection conn = new OracleConnection(conStr); if (conn.State != ConnectionState.Open) { conn.Open(); } OracleBulkCopy bulkCopy = new OracleBulkCopy(conn, OracleBulkCopyOptions.Default); bulkCopy.BatchSize = 100000; bulkCopy.BulkCopyTimeout = 260; bulkCopy.DestinationTableName = targetTable; try { if (conn.State != ConnectionState.Open) { conn.Open(); } // conn.Open(); if (dt != null && dt.Rows.Count != 0) { bulkCopy.WriteToServer(dt); } } catch (Exception ex) { Log.WriteLog(err, ex); } finally { conn.Close(); if (bulkCopy != null) bulkCopy.Close(); } }
小编当时使用的环境是PL/SQL 11G版本,1W条数据也就2秒就完事了,特别快,网上有人说bulkcopy能达到4000条/秒,比较可靠。
网上关于BulkCopy的使用方法挺多的,感兴趣的可以搜一下。
当然了大数据的保存方法不仅仅只有这一种方法,下篇文章将给大家介绍另一种方法,通过拼接插入语句来批量操作。
相关文章推荐
- Training Set, Validation Set 和Testing Set之间的差别及关系
- linux 系统监控、诊断工具之 IO wait
- on io scheduling again
- Codeforces Round #353 (Div. 2) B.Restoring Painting
- 服务器磁盘raid0,raid1,raid10,raid5,raid50,raid6,raid60 分析与案例
- 发展人工智能的中国特色
- FAQ系列 | 解读EXPLAIN执行计划中的key_len
- 规划(AI Planning)
- [riot.js]data-is属性使用
- 采访 Gaijin Entertainment游戏Crossout,先睹为快吧
- codeforces 675-E Trains and Statistic 线段树+dp
- hdu 2686/hdu 3376 Matrix Again 费用流模板
- E-Mail相关函数
- 参加JetBrains使用技能分享征集赛,赢Xbox!
- 设置 cell 中 detailTextLabel 文字的不同颜色
- HDFS初探
- 常用RAID容易解读和记住
- Tomcat运行报错:严重: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"]
- NoSQL 与大数据
- map和multimap 详解