VS添加完组件,自动生成的PetaPoco.cs文件中没有SqlBulkInsert这个方法,但是可以在里面添加,代码如下:

        /// <summary>
/// BulkInsert
/// </summary>
/// <param name="dt">dttable(must 1、columns exactly alike,2、without self-increasing primary key)</param>
/// <param name="tableName">table name(must include schema)</param>
/// <param name="fieldName">field name string[](must 1、exactly alike,2、without self-increasing primary key)</param>
/// <returns></returns>
public bool SqlBulkInsert(DataTable dt, string tableName, string[] fieldName)
{
try
{
OpenSharedConnection();
var entry = ConfigurationManager.ConnectionStrings[];//获取web.config中的数据库连接字符串
using (SqlBulkCopy bulk = new SqlBulkCopy(entry.ConnectionString))
{
try
{
bulk.DestinationTableName = tableName;
foreach (string field in fieldName)
{
bulk.ColumnMappings.Add(field, field);
}
bulk.WriteToServer(dt);
return true;
}
catch
{
return false;
}
finally
{
bulk.Close();
}
}
}
finally
{
CloseSharedConnection();
}
}

  第一个参数不解释了,把DataTable传过来;第二个是表名,需要注意的是这边需要SQL Server表的全名,包括schema。一般是dbo,但也有可能是别的,例如:org.Provinces;第三个是DataTable中的列名数组,需要注意的是大小写要和数据库中一致。

  如果是List类型数据源,可以通过以下方法得到DataTable数据和其列名数组:

public class ModelConvertHelper<T> where T : new()
{
//List<T>转成DataTable并返回列名数组
public static Tuple<DataTable, string[]> batchExecData(List<T> List)
{
DataTable dt = new DataTable();
List<string> list = new List<string>();
foreach (T entity in List)
{
DataRow dr = dt.NewRow();
foreach (PropertyInfo column in entity.GetType().GetProperties())
{
if (!dt.Columns.Contains(column.Name))
{
dt.Columns.Add(column.Name);
list.Add(column.Name);
}
object value = column.GetValue(entity);
if (value != null)
{
dr[column.Name] = value;
}
}
dt.Rows.Add(dr);
}
return new Tuple<DataTable, string[]>(dt, list.ToArray());
}
}

  调用方法:

//得到list数据
Tuple<DataTable, string[]> tule = ChineseAbs.DealLab.Helpers.ModelConvertHelper<AssetPoolData>.batchExecData(list);
var res = m_db.SqlBulkInsert(tule.Item1, "org.Provinces", tule.Item2);

  效果还不错,测试了两万条数据,用了0.5秒左右。

By QJL

PetaPoco批量插入数据的更多相关文章

  1. PetaPoco 批量插入数据

    网上找的代码,还没经过验证 /// <summary> /// Bulk inserts multiple rows to SQL /// </summary> /// < ...

  2. C#批量插入数据到Sqlserver中的四种方式

    我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...

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

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

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

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

  5. Java 批量插入数据(Oracle)

    //批量添加20000条数据用时8秒. try {    String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SI ...

  6. 批量插入数据(基于Mybatis的实现-Oracle)

    前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能. 项目DB框架:Mybatis.DataBase:Oracle. -------------------------------- ...

  7. C#批量插入数据到Sqlserver中的三种方式

    本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生 成 ...

  8. SqlServer——批量插入数据

    像Major表里面批量插入数据演示: 代码如下: Declare @I int Set @I= Begin Tran InsertData: Insert into Major values(@I,' ...

  9. mybatis批量插入数据到oracle

    mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“  错误解决方法 oracle批量插入使用 insert a ...

随机推荐

  1. Java经典编程题50道之三十一

    将一个数组逆序输出. public class Example31 {    public static void main(String[] args) {        int[] a = { 9 ...

  2. js中checkbox的全选和反选的实现

    <head> <meta charset="utf-8"/> <script type="text/javascript"> ...

  3. java 23种设计模式 深入理解

    以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive ...

  4. 深入研究Sphinx的底层原理和高级使用

    深入研究Sphinx的底层原理和高级使用

  5. UVA-10954 贪心+优先队列

    贪心策略:每次选取最小的两个数相加,将和作为新的数加入序列,再从里面取两个最小的数...直到只剩下一个数.优先队列正好对付这题. PS :以前在学校OJ做过几乎一毛一样的这题 AC代码: #inclu ...

  6. 关于.Net的知识和相关书籍

    a. DBCC DROPCLEANBUFFERS 清空缓存信息b. DBCC FREEPROCCACHE 从过程缓存中删除所有元素2. 引用两个和尚打水的故事,说明平时要注重积累,只有量变达到了才会形 ...

  7. sqlalchemy和flask-sqlalchemy几种分页操作

    sqlalchemy中使用query查询,而flask-sqlalchemy中使用basequery查询,他们是子类与父类的关系 假设 page_index=1,page_size=10:所有分页查询 ...

  8. MAC地址表配置与绑定

    MAC地址表分类 ---静态MAC地址表项由用户手工配置,表项不老化: ---黑洞MAC地址表项包括源黑洞MAC地址表项和目的黑洞MAC地址表项,用于丢弃含有特定源MAC地址或目的MAC地址的报文(例 ...

  9. shell 脚本——判断条件

    在之前的shell语言学习笔记中已经写过shell的几种判断语句及循环语句,也简单的介绍了shell语言判断语句和判断条件.在此再做进一步学习. test命令的测试功能 test命令用于检测系统文件及 ...

  10. pc浏览器css和js计算浏览器宽度的差异以及和滚动条的关系

    如图: css宽度:1250 不包括滚动条宽度 用控制台箭头选取元素显示的左边的宽度:1250  不包含滚动条宽度 缩放浏览器右上角显示的宽度:1267 包含了滚动条宽度 再看下控制台: 由此可计算浏 ...