Sql批量插入方法

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;

namespace TY.Tools
{

        /// <summary>
        /// 批量插入
        /// </summary>
        /// <typeparam name="T">泛型集合的类型</typeparam>
        /// <param name="conn">连接对象</param>
        /// <param name="tableName">将泛型集合插入到本地数据库表的表名</param>
        /// <param name="list">要插入大泛型集合</param>
        public static void BulkInsert<T>(SqlConnection conn, string tableName, IList<T> list)
        {
            using (var bulkCopy = new SqlBulkCopy(conn))
            {
                bulkCopy.BatchSize = list.Count;
                bulkCopy.DestinationTableName = tableName;

                var table = new DataTable();
                var props = TypeDescriptor.GetProperties(typeof(T))

                    .Cast<PropertyDescriptor>()
                    .Where(propertyInfo => propertyInfo.PropertyType.Namespace.Equals("System"))
                    .ToArray();

                foreach (var propertyInfo in props)
                {
                    bulkCopy.ColumnMappings.Add(propertyInfo.Name, propertyInfo.Name);
                    table.Columns.Add(propertyInfo.Name, Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType);
                }

                var values = new object[props.Length];
                foreach (var item in list)
                {
                    for (var i = 0; i < values.Length; i++)
                    {
                        values[i] = props[i].GetValue(item);
                    }

                    table.Rows.Add(values);
                }

                bulkCopy.WriteToServer(table);
            }
        }}

原文地址:https://www.cnblogs.com/oumi/p/10480285.html

时间: 2024-10-13 06:41:30

Sql批量插入方法的相关文章

增加批量插入方法

近期工作中发现批量插入的方法需求越来越大.所以在ORM中增加了MYSQL的批量插入方法.由三个方法组成,可以使用在不同情况下. 1.根据传入的实体集合生成批量插入的SQL语名 GetInsertSqlBatch() 2.在方法1的基础上增加一个执行并返回是否成功的功能 ExecuteInsertModelBatch(). 3.上面两个方法都没有控制每次批量插入的最大数量.只适用于小量批量插入情况.如果实体集合一次性传入1万,10万也做一次提交的话好像不太合适吧.所以就有了第三个方法.第三个方法是

sql - 批量插入数据

直接构造 insert into t (c1, c2, c3) values (1, 1, 1), (2, 2, 2) 使用UNION insert into t (c1, c2, c3) (select a1, a2, a3) union all (select b1, b2, b3) 利用查询结果 insert into t (c1, c2, c3) (select a1, a2, a3 from t2) sql - 批量插入数据,布布扣,bubuko.com

SQL批量插入表类 SqlBulkInsert

ado.net已经有了sqlBulkCopy, 但是那个用xml格式,网络传输数据量太大. 自己实现了一个,传输尽量少的字节. 性能没对比过,有需要的自己拿去测试. 1 using System.Data.SqlClient; 2 3 namespace RaywindStudio.DAL { 4 5 /// <summary> 6 /// MSSQL批量插入表 7 /// </summary> 8 public static class SqlBulkInsert { 9 10

Delphi中SQL批量插入记录

在进行数据库操作时, 我们经常会遇到批量向数据库中写入记录的情况. 在这里我提供3种操作方式: 1.  单条语句循环插入, 这是最笨的方法:for i := 0 to 100 do  ADOCommand1.Execute('IINSERT INTO .....')   //伪码, 只是说明意思 2.  多条语句批量插入, 将多条Insert语句拼成一条语句, 一次执行:for i := 0 to 100 do  sqlstr := sqlstr + 'INSERT INTO ...';ADOC

SQL批量插入数据

MS SQL Server数据库批量插入数据的sql语句总结: 第一种: insert into tb_NameList(Name,InsertDate,UpdateDate) values('aa',GETDATE(),GETDATE()) insert into tb_NameList(Name,InsertDate,UpdateDate) values('bb',GETDATE(),GETDATE()) insert into tb_NameList(Name,InsertDate,Upd

SQL 批量插入和更改数据

批量插入数据: declare @i int set @i = 12  while @i < 14 begin  INSERT INTO [mdm1220].[dbo].[DEVICE]            ([SERIAL_NUMBER]            ,[IMEI]            ,[WIFI_MAC_ADDR]            ,[BLUETOOTH_MAC_ADDR]            ,[ACTIVESYNC_ID]            ,[STRONG_

SQL批量插入、修改

1. 批量插入 insert into table_A  ( ORDER_CODE, PAYMENT_CODE) values <foreach item="item" index="index" collection="list" separator=","> (#{item.ORDER_CODE},if(#{item.PAYMENT_CODE}='',NULL,#{item.PAYMENT_CODE})) 2.

sql 批量插入 insert

INSERT INTO table ( "clo1", "col2", "col3", "col4", "col5" )VALUES ( 1, 10, NULL, '2019-12-19 13:38:35', '新年活动16张卡券'), ( 2, 11, NULL, '2019-12-19 15:05:13', '圣诞活动11张卡券'), ( 3, 12, NULL, '2019-12-19 15:05:1

sql 批量插入数据到Sqlserver中 效率较高的方法

使用SqlBulk #region 方式二 static void InsertTwo() { Console.WriteLine("使用Bulk插入的实现方式"); Stopwatch sw = new Stopwatch(); DataTable dt = GetTableSchema(); using (SqlConnection conn = new SqlConnection(StrConnMsg)) { SqlBulkCopy bulkCopy = new SqlBulkC