您的位置:首页 > 大数据

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#代码,仅供大家参考:

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的使用方法挺多的,感兴趣的可以搜一下。

  当然了大数据的保存方法不仅仅只有这一种方法,下篇文章将给大家介绍另一种方法,通过拼接插入语句来批量操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: