用途说明:

公司要求做一个数据导入程序,要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储。于是在网上进行查找,发现了一个比较好的解决方案,就是采用SqlBulkCopy来处理存储数据。SqlBulkCopy存储大批量的数据非常的高效,就像这个方法的名字一样,可以将内存中的数据表直接的一次性的存储到数据库中,而不需要一次一次的向数据库Insert数据。初次实验,百万级别的数据表,也只需几秒时间内就可以完全的存入数据库中,其速度,比传统的Insert方法不止快百倍千倍

      #region 批量添加实名认证信息(万级)
/// <summary>
/// 批量添加实名认证信息(万级)
/// </summary>
/// <returns></returns>
[Route("Test/BatchAddNciicUserInfo")]
[HttpGet]
public async Task<string> BatchAddNciicUserInfo()
{
DateTime regtime = DateTime.Parse("2019-06-24");
int i = ;
using (var db = new GPAppEntities())
{
using (SqlConnection conn = db.Database.Connection as SqlConnection)
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
using (SqlTransaction tran = conn.BeginTransaction())
{
db.Database.UseTransaction(tran);
try
{
var userlist = db.AppUser.Where(a => a.RegisterTime > regtime).OrderBy(a=>a.RegisterTime).Select(s => new { s.ID,s.MobilePhone}).Take().ToList();
StreamReader sr = new StreamReader(@"D:\Deploy\GPApp.Api\Content\Test\APP用户数据.txt", Encoding.Default);
String line;
List<IDCardNo> list = new List<IDCardNo>();
while ((line = sr.ReadLine()) != null)
{
var model = new IDCardNo();
model.Number = line;
list.Add(model);
} using (SqlBulkCopy sqlBC = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran))
{ DataTable dtSource = new DataTable();
dtSource.Columns.Add("ID", typeof(Guid));
dtSource.Columns.Add("UserId", typeof(Guid));
dtSource.Columns.Add("RealName", typeof(string));
dtSource.Columns.Add("Gender", typeof(string));
dtSource.Columns.Add("IDCardNo", typeof(string));
dtSource.Columns.Add("IDCardNoEncrypt", typeof(string));
dtSource.Columns.Add("IDCardAgency", typeof(string));
dtSource.Columns.Add("IDCardStartDate", typeof(DateTime));
dtSource.Columns.Add("IDCardEndDate", typeof(DateTime));
dtSource.Columns.Add("Portrait", typeof(string));
dtSource.Columns.Add("FIDCard", typeof(string));
dtSource.Columns.Add("BIDCard", typeof(string));
dtSource.Columns.Add("Status", typeof(string));
dtSource.Columns.Add("AppSystem", typeof(string));
dtSource.Columns.Add("AppDevice", typeof(string));
dtSource.Columns.Add("AppIP", typeof(string));
dtSource.Columns.Add("CreateDate", typeof(DateTime));
dtSource.Columns.Add("ModifyDate", typeof(DateTime));
dtSource.Columns.Add("Birthday", typeof(DateTime));
foreach (var item in userlist)
{
DataRow newdr = dtSource.NewRow();
newdr["ID"] = Guid.NewGuid();
newdr["UserId"] = item.ID;
newdr["RealName"] = "叶长种";
newdr["Gender"] = "男";
newdr["IDCardNo"] = list[i].Number;
newdr["IDCardNoEncrypt"] = SHA256Help.sha256(list[i].Number).ToLower();
newdr["IDCardAgency"] = "上海市公安局黄浦分局";
newdr["IDCardStartDate"] = DateTime.Parse("2010-01-01 00:00:00");
newdr["IDCardEndDate"] = DateTime.Parse("2020-01-01 00:00:00");
newdr["Portrait"] = "";
newdr["FIDCard"] = "";
newdr["BIDCard"] = "";
newdr["Status"] = "一致";
newdr["AppSystem"] = "";
newdr["AppDevice"] ="";
newdr["AppIP"] = "";
newdr["CreateDate"] = DateTime.Now;
newdr["ModifyDate"] = DateTime.Now;
newdr["Birthday"] = DateTime.Parse("1989-01-28 00:00:00");
dtSource.Rows.Add(newdr);
i = i + ;
} sqlBC.BatchSize = ;
sqlBC.BulkCopyTimeout = ;
sqlBC.DestinationTableName = string.Format("dbo.NciicUserInfo");
sqlBC.ColumnMappings.Add("ID", "ID");
sqlBC.ColumnMappings.Add("UserId", "UserId");
sqlBC.ColumnMappings.Add("RealName", "RealName");
sqlBC.ColumnMappings.Add("Gender", "Gender");
sqlBC.ColumnMappings.Add("IDCardNo", "IDCardNo");
sqlBC.ColumnMappings.Add("IDCardNoEncrypt", "IDCardNoEncrypt");
sqlBC.ColumnMappings.Add("IDCardAgency", "IDCardAgency");
sqlBC.ColumnMappings.Add("IDCardStartDate", "IDCardStartDate");
sqlBC.ColumnMappings.Add("IDCardEndDate", "IDCardEndDate");
sqlBC.ColumnMappings.Add("Portrait", "Portrait");
sqlBC.ColumnMappings.Add("FIDCard", "FIDCard");
sqlBC.ColumnMappings.Add("BIDCard", "BIDCard");
sqlBC.ColumnMappings.Add("Status", "Status");
sqlBC.ColumnMappings.Add("AppSystem", "AppSystem");
sqlBC.ColumnMappings.Add("AppDevice", "AppDevice");
sqlBC.ColumnMappings.Add("AppIP", "AppIP");
sqlBC.ColumnMappings.Add("CreateDate", "CreateDate");
sqlBC.ColumnMappings.Add("ModifyDate", "ModifyDate");
sqlBC.ColumnMappings.Add("Birthday", "Birthday");
sqlBC.WriteToServer(dtSource);
}
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
} }
}
return "添加成功";
}
public class IDCardNo
{
public string Number { get; set; }
}
#endregion

最短时间(几秒内)利用C#往SQLserver数据库一次性插入10万条数据的更多相关文章

  1. 使用hibernate在5秒内插入11万条数据,你觉得可能吗?

    需求是这样的,需要查询某几个表的数据,然后插入到另外一个表. 一看到需求,很多人都会用hibernate去把这些数据都查询出来,然后放到list中, 然后再用for循环之类的进行遍历,一条一条的取出数 ...

  2. C# 使用EPPlus 秒导出10万条数据

    1.先要引用dll文件,可以直接使用vs自带的包管理,如下图: 输入 EPPlus 我这里是安装过了的所以这里显示的是卸载而不是安装. 安装成功了之后会看到这个dll文件 代码如下: //导出Exce ...

  3. 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...

  4. 通过数组方式向Oracle大批量插入数据(10万条11秒)

    1.创建数据库Person CREATE TABLE Person( id number, name nvarchar2() , age number , sex nvarchar2() , pass ...

  5. C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    作者: Aicken(李鸣)  来源: 博客园  发布时间: 2010-09-08 15:00  阅读: 4520 次  推荐: 0                   原文链接   [收藏] 摘要: ...

  6. 极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒

    链接地址:http://www.cnblogs.com/armyfai/p/4646213.html 要:在这里我们将看到的是C#中利用ODP实现在Oracle数据库中瞬间导入百万级数据,这对快速批量 ...

  7. 2020-04-23:假设一个订单的编号规则是AAAAOrder2020-0000001,AAAAOrder2020-0000002....后面的数字是自增长,如果订单号码达到AAAAOrder2020-1000000(100万),数据库中应该有100万条数据,此时我随机删除2条数据(物理删除,且不考虑日志和备份),请问怎么找到删掉的数据的编号?给出解题思路即可,答案需要在1秒内运行得到。

    福哥答案2020-04-23: 分批查询:分成500次count(),每次count()肯定小于等于2000条数据,经过测试,一次count()在.1ms左右,500次就是500ms.二分法(时间微超 ...

  8. MySQL插入10万数据时间(结论:最快14.967s,每秒插入6681条)

    记录我的一次MySQL操作Demo: 存储过程: DROP PROCEDURE IF EXISTS my_insert; CREATE PROCEDURE my_insert() BEGIN ; lo ...

  9. (C#版本)提升SQlite数据库效率——开启事务,极速插入数据,3秒100万,32秒1000万条数据

    SQLite插入数据效率最快的方式就是:开启事务  +   insert语句  +  关闭事务(提交) 利用事务的互斥性,如果在批量的插入操作前显式地开启一次事务,在插入操作结束后,提交事务,那么所有 ...

随机推荐

  1. HttpWebRquest.GetRequestStreamAsync()发生延迟

    前景提要:此问题不定适用Browser通信方式,主要提供给通信发生异常时解决思路. Q: request请求创建过程发生延迟 [Scene]: ​ .Net的HttpWebRquest.GetRequ ...

  2. CSS学习笔记-盒子阴影及文字阴影

    盒子阴影:    1.格式:        box-shadow:h-shadow v-shadow blur spread color insert;        box-shadow:水平偏移 ...

  3. python的exe反编译

    目录 python的exe反编译 方法一.使用archive_viewer.py提取pyc 方法二.使用pyinstxtractor.py提取pyc python的exe反编译 驱动人生样本为pyth ...

  4. ios中设置UIButton圆角,添加边框

    //例如: UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(50, ...

  5. 【转】Kotlin的inline内联函数

    原文链接:https://blog.csdn.net/Jaden_hool/article/details/78437947 方法调用流程 调用一个方法是一个压栈和出栈的过程,调用方法时将栈针压入方法 ...

  6. 剑指offer 23:从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路 按照从左往右从上到下的顺序打印节点,需要我们维护一个队列,这个队列放入元素的顺序是访问队头节点(起始先放入根节点),则若当前 ...

  7. c# 获取sqlserver 运行脚本的print消息的方法分享

    转自:http://www.maomao365.com/?p=6923  摘要: 在sql脚本的编写中,我们经常使用sql脚本print消息,作为输出测试, 通过获取print消息,我们可以快速获取程 ...

  8. SSL握手中win xp和SNI的那点事

    SSL握手中win xp和SNI的那点事 一.背景需求server1-3使用不同的域名对外提供https服务,用nginx作为前端负载均衡器并负责https集中解密工作(以用户访问的域名为依据进行流量 ...

  9. 科研画图:散点连接并平滑(基于Matlab和Python)

    导师要求参照别人论文中的图(下图),将其论文中的图画美观些,网上关于科研画图相关的代码比较少,就自己鼓捣了下. 附上自己整合验证过的代码: 功能:将散点连接并平滑 1)Matlab 效果图: x1=[ ...

  10. limit的优化

    SELECT * FROM t_fly WHERE fly_id IN (8888,1,24,6666); 查询速度很快,对于一些过万数据的查询,mysql也能轻松的查询出来