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. STL源码剖析之序列式容器

    最近由于找工作需要,准备深入学习一下STL源码,我看的是侯捷所著的<STL源码剖析>.之所以看这本书主要是由于我过去曾经接触过一些台湾人,我一直觉得台湾人非常不错(这里不涉及任何政治,仅限 ...

  2. 去掉chrome浏览器中input获得焦点时的带颜色边框呢

    可以设置表单控件的outline属性为none值, 来去掉Chrome浏览器中输入框以及其它表单控件获得焦点时的带颜色边框. css代码如下: input{outline:none}

  3. js闭包面试题目

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 编码问题 php字符编码转换类

    各种平台和软件打开显示的编码问题,需要使用不同的编码,根据我们不同的需求. php 字符编码转换类,支持ANSI.Unicode.Unicode big endian.UTF-8.UTF-8+Bom ...

  5. Flask Ansible自动化平台搭建(持续更新)

    一:简介 使用Ansible + Flask + Celery搭建web平台. 目录结构 . ├── ansible_api │   ├── ansible_playbook_inventory.py ...

  6. AVS、MPEG-2、H264标准文档

    联合信源对AVS解码源码和相应的AVS码流.AVS码流太大,可以从http://cosoft.org.cn/projects/avsdec下载.解压avsdec_source.zip后,用VC6编译a ...

  7. Rwordseg使用

    #用于下载安装rJava 和 Rwordseg,如果安装了就注释掉 install.packages("rJava") install.packages("Rwordse ...

  8. zTree实现地市县三级级联Service接口实现

    zTree实现地市县三级级联Service接口实现 ProvinceServiceImpl.java: /** * @Title:ProvinceServiceImpl.java * @Package ...

  9. freemarker之数组

    freemarker之数组 1.设计思路 (1)声明一个数组 (2)打印数组中的元素 2.设计源码 <#--freemarker数组--> <#assign nums=[12,34, ...

  10. org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...