最近项目需要做一个批量导入的功能,每次导入最少的记录数都达到1万,之前写了一个通过循环Insert的方法,结果我自己都看不下了。太慢了,所以用了SqlBulkCopy,很快,100万条数据,1分钟都不到。

class Program
{
/// <summary>
/// 批量插入
/// </summary>
/// <param name="dt">数据集</param>
public static void BulkToDB(DataTable dt)
{
using (SqlConnection sqlConn = new SqlConnection("Data Source=.;uid=sa;pwd=123456;Initial Catalog=Test"))
{
SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn);
bulkCopy.DestinationTableName = "UserInfo"; //要插入数据的表名
bulkCopy.BatchSize = dt.Rows.Count; //插入的条数 try
{
sqlConn.Open();
if (dt != null && dt.Rows.Count != )
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
throw ex;
}
finally
{
sqlConn.Close();
if (bulkCopy != null)
bulkCopy.Close();
}
}
} /// <summary>
/// 创建表结构,(Id(自增),LoginName,LoginPwd)
/// </summary>
/// <returns></returns>
public static DataTable GetTableSchema()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]{
new DataColumn("Id",typeof(int)),
new DataColumn("LoginName",typeof(string)),
new DataColumn("LoginPwd",typeof(string))
}); return dt;
} static void Main(string[] args)
{
//100万条数据
Stopwatch sw = new Stopwatch();
for (int multiply = ; multiply < ; multiply++)
{
DataTable dt = GetTableSchema();
for (int count = multiply * ; count < (multiply + ) * ; count++)
{
DataRow r = dt.NewRow();
// r[0] = 1;//因为该列是自增列,所以可以不赋值
r[] = string.Format("Name-{0}", count * multiply);
r[] = string.Format("Pwd-{0}", count * multiply);
dt.Rows.Add(r);
}
sw.Start();
BulkToDB(dt);
sw.Stop();
Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
}
Console.ReadLine();
}
}

执行结果:

最新文章

  1. vue-validator(vue验证器)
  2. live555编译、移植
  3. Storyboards
  4. jquery 失去焦点时输入框为空时自动填写默认内容
  5. PHP操作cookie函数:setcookie()与setrawcookie()
  6. CentOS+nginx+uwsgi+Python 多站点环境搭建
  7. Myeclipse 中添加mysql的jdbc驱动
  8. 怎么关闭wps热点?永久关闭wps右下角弹窗的方法!
  9. 下一个ajax异步请求被挂起问题
  10. [NOIP2014]飞扬的小鸟 D1 T3 loj2500 洛谷P1941
  11. SQLServer查询计划
  12. .net core中的对象池
  13. 小米note开启调试模式
  14. JavaScript原型规则和实例
  15. day02 基本数据类型与运算符
  16. 在Ubuntu16.04上使用Autofs
  17. PyQt 5菜单和工具栏
  18. 监控memcache服务
  19. 用table表格来调整控件的格式
  20. WebAPI 请求跨域问题

热门文章

  1. 散列:散列函数与散列表(hash table)
  2. Oracle中的游标(转)
  3. 要求两个异步任务都完成后, 才能回到主线程:dispatch_group_t
  4. sparksql 动态设置schema将rdd转换成dataset/dataframe
  5. 亲测有效,解决Can &#39;t connect to local MySQL server through socket &#39;/tmp/mysql.sock &#39;(2) &quot;;
  6. Spring Boot 学习笔记一(SpringBoot启动过程)
  7. URLDecoder和URLEncoder的使用总结
  8. Android获取Context(任意位置任意地方,全局上下文)
  9. 《Head First 设计模式》学习笔记——命令模式
  10. CentOS 7 部署 ASP.NET Core 应用程序