1. 我们在对数据库进行新增数据时,怎么能把速度提到最快,时间缩到最短呢?下面针对三种方法进行比较
  2. 新增
    • 逐条新增数据模式
    •             Stopwatch s2 = new Stopwatch();
      s2.Start();
      for (int i = ; i < ; i++)
      { //方法一36s-37s这样的时间结果36192 40860 37434
      string sql = "insert into student (Name,Sex,BirthDate) values('张三','男','2019-03-29')";
      CreateSql(sql);
      }
      s2.Stop();
      textBox7.Text = s2.ElapsedMilliseconds.ToString();

      逐条逐步骤新增,共累计增加十万条,结束,得到结果是在36秒左右时间新增完成十万条数据。

    • 这种办法,虽然有连接池在提高了一定效率,但是很慢
    • 拼接模式新增数据
    •             Stopwatch s = new Stopwatch();
      s.Start();
      StringBuilder sBuilder = new StringBuilder();
      for (int i = ; i < ; i++)
      {
      sBuilder.Append("insert into student (Name,Sex,BirthDate) values('张三','男','2019-03-29');");
      }
      s.Stop();
      CreateSql(sBuilder.ToString());
      textBox6.Text = s.ElapsedMilliseconds.ToString();

      用StringBuilder拼接十万个sql字符串,在交给插入代码执行,十万条总耗时约27秒-28秒,可见虽然比逐条插入快了约十秒,但是效果还不是很理想

    • 高效插入模式SqlBulkCopy
    •             Stopwatch s = new Stopwatch();
      s.Start();
      DataTable dt = new DataTable();
      dt.TableName = "Student";
      dt.Columns.Add("ID");
      dt.Columns.Add("Name");
      dt.Columns.Add("Sex");
      dt.Columns.Add("BirthDate");
      DataRow dr = null;
      for (int i = ; i <; i++)
      {
      dr = dt.NewRow();
      dr["ID"] = i;
      dr["Name"] = "张三";
      dr["Sex"] = "男";
      dr["BirthDate"] = "2019-03-29";
      dt.Rows.Add(dr);
      }
      CreateSql(dt);
      s.Stop();
      textBox7.Text = s.ElapsedMilliseconds.ToString();

      先拼接DataTable,然后动态创建十万行DataRow,这样DataTable就组成了数据源,直接使用SqlBulkCopy来插入数据,此时十万条数据新增只需要1.1秒-1.3秒左右,速度很快了。

    • SqlBulkCopy代码:
    • private void CreateSql(DataTable dt)
      {
      using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;DataBase=student_micc"))
      {
      if (conn.State == ConnectionState.Closed)
      {
      conn.Open();
      }
      SqlBulkCopy sqlCopy = new SqlBulkCopy(conn);
      sqlCopy.BatchSize = dt.Rows.Count;
      sqlCopy.DestinationTableName = "Student";
      sqlCopy.WriteToServer(dt);
      sqlCopy.Close();
      }
      }

      普通Ado.Net连接串插入

private void CreateSql(string sql)
{
using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;DataBase=student_micc"))
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.CommandTimeout = ;
cmd.ExecuteNonQuery();
}
}
}

C#高效新增数据到数据库(十万级别测试)的更多相关文章

  1. SSM Mybatis将新增数据写入数据库时出现的500状态码:Error updating database.的可能

    关于maven下ssm整合的项目推荐这篇博客:https://www.cnblogs.com/yiye/p/5969157.html 今日在ssm下的将新增数据写回数据库时遇到不少的问题,现作记录 如 ...

  2. mysql数据库千万级别数据的查询优化和分页测试

    原文地址:原创 mysql数据库千万级别数据的查询优化和分页测试作者:于堡舰 本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处 http://blog.sina.com. ...

  3. 在Oracle中快速创建一张百万级别的表,一张十万级别的表 并修改两表中1%的数据 全部运行时间66秒

    万以下小表做性能优化没有多大意义,因此我需要创建大表: 创建大表有三种方法,一种是insert into table selec..connect by.的方式,它最快但是数据要么是连续值,要么是随机 ...

  4. Django之同时新增数据到两个数据库表与同时返回两个表的数据(插拔式)

    models:比如有以下三个模型 from django.db import models """ 基类,其他类继承即可获得对应的字段 """ ...

  5. .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库

    批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...

  6. Mysql加锁过程详解(6)-数据库隔离级别(1)

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  7. mybatis学习之路----mysql批量新增数据

    原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...

  8. springmvc 事务控制与数据库隔离级别

    springmvc 事物传播与数据库隔离控制 http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html 一.Propagation ...

  9. SQL SERVER 2008 数据库隔离级别代码演示

    SQL SERVER 2008 数据库隔离级别代码演示   个隔离级别(其实这是SQL 工业标) 种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性 ...

随机推荐

  1. Python中where()函数的用法

    where()的用法 首先强调一下,where()函数对于不同的输入,返回的只是不同的. 1当数组是一维数组时,返回的值是一维的索引,所以只有一组索引数组 2当数组是二维数组时,满足条件的数组值返回的 ...

  2. centos7 dubbokeeper安装

    下载dubbokeeper源码 git clone https://github.com/dubboclub/dubbokeeper   mysql 先执行install-mysql.sh   编译好 ...

  3. mongoTemplate更新一个Document里面的数组的一个记录。

    假如有一个Document如下: { "_id" : "69bca85a-5a61-4b04-81fb-ff6a71c3802a", "_class& ...

  4. Register A Callback To Handle SQLITE_BUSY Errors(译)

    http://www.sqlite.org/c3ref/busy_handler.html留着自己看的. Register A Callback To Handle SQLITE_BUSY Error ...

  5. Linux 非阻塞connect,错误码:EINPROGRESS

    当我们以非阻塞的方式来进行连接的时候,返回的结果如果是 -1,这并不代表这次连接发生了错误,如果它的返回结果是 EINPROGRESS,那么就代表连接还在进行中. 后面可以通过poll或者select ...

  6. XML--修改XML数据

    DECLARE @xmlDoc XMLset @xmlDoc='<root> <book id="0001"> <title>C# Progra ...

  7. svn自动更新服务器最新代码

    1.很简单打开dos界面 cd到svn exe目录下,运行 cd C:\Program Files\TortoiseSVN\bin    --svn安装目录(作者使用时TortoiseSVN客户端,其 ...

  8. 随手记录: MVC自定义提交form

    function mySubmit() { var frm = $('#frm'); var result = frm.valid(); if (ret) { frm.submit(); } else ...

  9. ASP.NET MVC 通过ActionFilterAttribute来实现防止重复提交

    实现思想:每个页面打开的时候会在页面的隐藏控件自动生成一个值并将这个值赋值session,当提交方法的时候会在过滤器的时候进行获取session和页面传值过来的隐藏控件的值进行比较,如果值相同的话,重 ...

  10. iOS 添加字体

    1. 将字体(ttf 文件)导入项目. 2. 在项目plist 文件里的 Fonts provided by application 添加新导入的字体. 3. 代码中的调用 [aLabel setFo ...