最近要做.net关于sql大量插入,找到了sqlbulkcopy(自己google下,应该很多说明了)这个好东西,于是测试下性能,用了三个方法对比:

1)直接用ado.net,for循环N次进行单条插入

2)把N条插入语句拼在一个sql,进行插入

3)直接使用sqlbulkcopy进行插入

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics; namespace SQLTEST
{
class Program
{
static void Main(string[] args)
{ //int time = 200;
test(20);
test(200);
test(2000);
test(10000);
test(50000);
Console.ReadLine();
} public static void test(int time){
Stopwatch sp = new Stopwatch();
Console.WriteLine(time + "条数据插入测试"); //测试方法1
{
using (SqlConnection sqlcon = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=??"))
{
sqlcon.Open();
string singesql = "INSERT INTO [student] ([name],[age])VALUES('abc',3);";
SqlCommand sqlcommand = new SqlCommand(singesql, sqlcon);
//计时开始
sp.Restart();
for (int i = 0; i < time; i++)
{
sqlcommand.ExecuteNonQuery();
}
sp.Stop();
}
}
Console.WriteLine("方法1:" + sp.ElapsedMilliseconds + "毫秒"); //测试方法2
{
using (SqlConnection sqlcon = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=??"))
{
sqlcon.Open();
string singesql = "INSERT INTO [student] ([name],[age])VALUES('abc',3);";
string execsql = "";
for (int i = 0; i < time; i++)
{
execsql = execsql + singesql;
}
SqlCommand sqlcommand = new SqlCommand(execsql, sqlcon); //计时开始
sp.Restart();
sqlcommand.ExecuteNonQuery();
sp.Stop();
}
}
Console.WriteLine("方法2:" + sp.ElapsedMilliseconds + "毫秒"); //测试方法3
{
using (SqlConnection sqlcon = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=??"))
{
sqlcon.Open();
SqlBulkCopy sqlc = new SqlBulkCopy(sqlcon);
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Columns.Add("age"); for (int i = 0; i < time; i++)
{
dt.Rows.Add(38009, "nemw", 123);
}
sqlc.DestinationTableName = "student"; //计时开始
sp.Restart();
sqlc.WriteToServer(dt);
sp.Stop();
}
}
Console.WriteLine("方法3:" + sp.ElapsedMilliseconds + "毫秒");
Console.WriteLine(); }
}
}

  

插入N条数据的测试结果如下:

效率相差还是很夸张的,大家大量数据插入还是有sqlbulkcopy吧,原理还的高手告知~~

关于SqlBulkCopy的测试的更多相关文章

  1. 批量插入 SqlBulkCopy的测试

    关于SqlBulkCopy的测试 最近要做.net关于sql大量插入,找到了sqlbulkcopy(自己google下,应该很多说明了)这个好东西,于是测试下性能,用了三个方法对比: 1)直接用ado ...

  2. SqlBulkCopy类进行大数据(一万条以上)插入测试

    好多天没写博客了,刚刚毕业一个多月! 关于上一篇博客中提到的,在进行批量数据插入数据库的时候可以通过给存储过程传递一个类型为Table的参数进行相关操作,在这个过程中本人没有进行效率的测试.后来查找发 ...

  3. C# SqlBulkCopy类批量导入 测试

    一.功能说明 1.可以选择,只导入部分列,或者导入全部列. 2.导入速度的确比一般sql要快. 3.不用写sql语句 ----------------------------------------- ...

  4. SqlBulkCopy类进行大数据(10000万条以上)插入测试

    好多天没写博客了,刚刚毕业一个多月,在IT的路上真是迷茫啊! 关于上一篇博客中提到的,在进行批量数据插入数据库的时候可以通过给存储过程传递一个类型为Table的参数进行相关操作,在这个过程中本人没有进 ...

  5. 转:SqlBulkCopy类进行大数据(一万条以上)插入测试

    转自:https://www.cnblogs.com/LenLi/p/3903641.html 结合博主实例,自己测试了一下,把数据改为3万行更明显!! 关于上一篇博客中提到的,在进行批量数据插入数据 ...

  6. 使用SqlBulkCopy批量插入数据,测试20万条用时5秒

    using System;using System.Collections.Generic;using System.Linq;using System.Text; using System.Data ...

  7. [小干货]SqlBulkCopy简单封装,让批量插入更方便

    关于 SqlServer 批量插入的方式,前段时间也有大神给出了好几种批量插入的方式及对比测试(http://www.cnblogs.com/jiekzou/p/6145550.html),估计大家也 ...

  8. MySQL数据迁移到MSSQL-以小米数据库为例-测试828W最快可达到2分11秒

    这里采用.NET Framework 4.0以上版本中新出现的 ConcurrentQueue<T> 类 MSDN是这样描述的: ConcurrentQueue<T> 类是一个 ...

  9. sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )

    通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下.   其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...

随机推荐

  1. List 常用方法解析

    1.Count属性 (获得List中元素数目) 2.Add( ) 在List中添加一个对象的公有方法 3.AddRange( ) 公有方法,在List尾部添加实现了ICollection接口的多个元素 ...

  2. 查询 MySQL 库/表相关信息

    SHOW DATABASES //列出 MySQL Server 数据库. SHOW TABLES [FROM db_name] //列出数据库数据表. SHOW CREATE TABLES tbl_ ...

  3. Openwrt PPTP Server笔记

    1.安装PPTP opkg updateopkg install kmod-mppeopkg install pptpd 2./etc/pptpd.conf option /etc/ppp/optio ...

  4. map参数值取代

    public static String processTemplate(String tpl, Map<String, ?> params){ Iterator<String> ...

  5. PhotoZoom Classic 7怎么样?对电脑和系统要求高不高?

    PhotoZoom Classic 7怎么样?对电脑和系统要求高不高? 相较于更专业PhotoZoom Pro,标准版本的PhotoZoom Classic 7更适用于日常工作中的图片放大处理,例如在 ...

  6. layer弹出框的用法

    页面中引入  layer.js 就行了 1.弹出一个提示信息: layer.msg("我是哦提示信息"); 2.弹出一个带选择的按钮的框 layer.open({ title: ' ...

  7. android学习路线总结

    感谢安辉作者,学习路线  https://www.cnblogs.com/yishaochu/p/5436094.html https://www.cnblogs.com/jycboy/p/60666 ...

  8. 洛谷P1563 玩具谜题 简单模拟

    没意义,注意方向别判错. Code: #include<cstdio> #include<cstring> using namespace std; const int max ...

  9. 路飞学城Python-Day181

    Evernote Export Nginx默认网站 当Nginx配置文件中有且仅有一个Server的时候,该Server就被Nginx认为是默认网站,所有发给Nginx服务器80端口的数据都会默认给s ...

  10. node——express实现hello world

    创建文件夹,在文件夹内再创建index.js 1.package.json npm init -y 2.安装 npm install express ---save 3.index.js //入口文件 ...