DataTable 批量插入SqlServer数据库 使用:SqlBulkCopy

简单使用:
     private void UpdateTitle(DataTable dt)
        {

            if (dt != null && dt.Rows.Count > 0)
            {
                using (SqlBulkCopy sbc = new SqlBulkCopy(SqlHelper.connectionString))
                {
                    sbc.BatchSize = dt.Rows.Count;//每批次操作数量
                    sbc.BulkCopyTimeout = 60;//操作允许的超时时间 单位:秒 (超时则事务不提交)
                    sbc.DestinationTableName = "TB_product_NewTitle";  //数据库对应表名
                    sbc.WriteToServer(dt);
                }
            }
        }
如果出现 DataTable中的字段和数据库的字段不对应的异常信息,需要手动的为DataTable的列 和 数据库中的列 绑定
注意:dataColumns的数据类型,一定要和数据库一样,不然各种报错
字段也区分大小写,一定要注意

  /// <summary>
        /// 批量更新数据到数据库(DataTable列结构保持和数据库表一致)
        /// </summary>
        /// <param name="dt"></param>
        public static void BulkCopyData(Queue<QueueMessage> myQ, int SiteID,int max)
        {
            if (myQ != null && myQ.Count > 0)
            {
                using (SqlBulkCopy sbc = new SqlBulkCopy(SqlHelper.con))
                {
                    QueueMessage qm = new QueueMessage();
                    DataTable dt = new DataTable();
                    dt.Columns.AddRange(
              new DataColumn[] {
              new DataColumn("Sender", typeof(Int32)),
              new DataColumn("Receiver", typeof(Int32)),
              new DataColumn("Content", typeof(string)),
              new DataColumn("CreateTime", typeof(DateTime)),
              new DataColumn("SenderType", typeof(int))             });
                    int qcount=0;
                    if (max > 0)
                        qcount = max;
                    else
                        qcount = myQ.Count();
                    for (int i = 0; i < qcount; i++)
                    {
                        qm = myQ.Dequeue() as QueueMessage;
                        DataRow dr = dt.NewRow();
                        dr["Sender"] = qm.Sender;
                        dr["Receiver"] = qm.Receiver;
                        dr["Content"] = qm.Content;
                        dr["CreateTime"] = qm.CreateTime;
                        dr["SenderType"] = qm.SenderType;
                        dt.Rows.Add(dr);
                    }            //把DataTable的列名和数据库的列名绑定
                    sbc.ColumnMappings.Add("Sender", "Sender");
                    sbc.ColumnMappings.Add("Receiver", "Receiver");
                    sbc.ColumnMappings.Add("Content", "Content");
                    sbc.ColumnMappings.Add("CreateTime", "CreateTime");
                    sbc.ColumnMappings.Add("SenderType", "SenderType");
                    sbc.BatchSize = dt.Rows.Count;//每批次操作数量
                    sbc.BulkCopyTimeout = 60;//操作允许的超时时间 单位:秒 (超时则事务不提交)
                    sbc.DestinationTableName = "TB_Message_" + SiteID;//数据库对应表名
                    sbc.WriteToServer(dt);
                }
            }
        }

DataTable 批量插入SqlServer数据库 使用:SqlBulkCopy

时间: 2024-09-30 16:26:00

DataTable 批量插入SqlServer数据库 使用:SqlBulkCopy的相关文章

java 高效批量插入 sqlserver 数据库

@Test public void clockingIn_Img() throws Exception{ DbJdbc idb = DbMaster.getIDB("JXT"); List<Jxt_pay_info> pays=idb.getBeanList("select top 100000 * from jxt_pay_info", Jxt_pay_info.class); //可以用idb进行测试了.... //大数据插入方式 String sq

C# 数据批量插入到数据库SqlBulkCopy(源数据类型:List&lt;T&gt; Or DataTable)

  /*_____________________ List<T>类型数据 To Sql_______________________________*/ /// <summary>        /// Sqlbulkcopies the specified SMS.批量插入到数据库        /// </summary>        /// <param name="data">list类型数据.</param>  

DataTable批量插入数据库

DataTable批量插入数据库 最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.update(dataset,tablename);sqlbulkcopy.WriteToServer(datatable);三个方法的性能进行比较: 1.生成测试的datatable表,表结构如下: UniqueID(主键,自动增长) | CompanyName | Co

C# 将DataTable表中的数据批量插入到数据库表中的方法

C#中有时候需要将内存中的数据批量插入到数据库表中,使用for循环进行批量插入不但耗时而且会频繁操作数据库. 针对数据量很少的可以使用for循环插入,但是针对于数据量大的则不推荐使用for循环插入,推荐使用sql的块处理插入. 块处理不但耗时少而且不会频繁对数据库进行操作,只是需要注意的一点是DataTable中的列必须与表的列完全一致. 如下代码是批量插入的一个函数,自测可用. 1 #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 2 /// <summa

MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)

MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Text; p

批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor

原文:批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor 批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor2.1.11 之前写过一篇文章,使用redgate公司的SQL PROMPT工具,但是不太方便 SQLPROMPT5.3对各种加密对象的解密测试 SQL2005解密已经被加密的存储过程 昨天ahdung 童鞋介绍了这个工具给我,非常感谢他 dbForge SQL Decryptor这个工具的软件公司是dev

DataTable 获取列名 DataTable批量更新至数据库

好久没写东西了,这几个月也没下功夫钻研技术,愧疚啊.说下最近刚学会的DataTable 的用法吧,新手适合看下. 1 DataTable 获取列名 在处理数据的时候大家都会用到模型,从datatable遍历数据的时候可以用datatable的columns属性获取列名,然后就可以动态的用datatable 生成一个josn字符串,然后再讲json字符串转化成你想要的model,是不是很方便?. 下面是将datatable转化为json数组的方法. private string DataTable

ESql修改之插入SQLServer数据库记录实例

一个政府网站维护内容的实例,添加信息 信息编辑页面 主题.顺序及栏目节点 <table border="0" cellpadding="0" cellspacing="0" align="center" width="96%"> <tr height="30"> <td> 主 题</td> <td><input name=

php 将二维数组批量插入到数据库中

$arr = array( array('id'=>4,'name'=>'ceshi4'), array('id'=>5,'name'=>'ceshi5'), array('id'=>6,'name'=>'ceshi6'), ); foreach($arr as $v){ $valueStr .= "(".$v['id'].",'".$v['name']."'),"; } $valueStr = rtrim($