1.简介


1.MSDN

核心方法:SqlBulkCopy.WriteToServer

将所有行从数据源复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中.

2.一句话介绍

将DataTable或DataRow中的数据直接复制到数据库中指定的表中

3.注意事项

  1. 表名、列名对大小写敏感
  2. DataTable的架构必须和目标表保持一致(最常出的错误就是列顺序不一致)
  3. DataTable中int类型的字段如果为NULL,必须对其赋值为 DBNull.Value
  4. SqlBulkCopy遇到重复字段只会直接报错,然后默认回滚所有复制操作即复制到一半出错了,那整个前面复制也都放弃掉

2.示例


1.使用SqlBulkCopy

调用格式

SqlBulkCopyByDatatable(SQLAss.GetConnString(),"PartList", excelDt);

SQLHelper类

public SQLHelper()
{
//DatabaseTest 引用自web.config connectionStrings中
string strconn = ConfigurationManager.ConnectionStrings["SQLAss"].ConnectionString;
conn = new SqlConnection(strconn);
} public string GetConnString()
{
return conn.ConnectionString;
}

Web.config

注意必须要有:Persist Security Info=True

<configuration>
<connectionStrings>
<add name="SQLAss" connectionString="Persist Security Info=True; SERVER=10.100.10.100;DATABASE=DBName;UID=userId;PWD=password;Connect Timeout=2880"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>

SqlBulkCopy

public static void SqlBulkCopyByDatatable(string ConnectionString, string TableName, DataTable Dt)
{
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
using (SqlBulkCopy sqlbulkcopy =new SqlBulkCopy(ConnectionString, SqlBulkCopyOptions.UseInternalTransaction))
{
try
{
sqlbulkcopy.BulkCopyTimeout = 5000;//指定超时时间 以秒为单位 默认超时时间是30秒,设置为0即不限时间
sqlbulkcopy.DestinationTableName = TableName;//目标数据库表名 for (int i = 0; i < Dt.Columns.Count; i++)
{
//映射字段名 DataTable列名 ,数据库对应列名
sqlbulkcopy.ColumnMappings.Add(Dt.Columns[i].ColumnName, Dt.Columns[i].ColumnName);
}
/*
//额外,可不写:设置一次性处理的行数。这个行数处理完后,会激发SqlRowsCopied()方法。默认为1
//这个可以用来提示用户S,qlBulkCopy的进度
sqlbulkcopy.NotifyAfter = 1;
//设置激发的SqlRowsCopied()方法,这里为sqlbulkcopy_SqlRowsCopied
sqlbulkcopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
*/
sqlbulkcopy.WriteToServer(Dt);//将数据源拷备到目标数据库
}
catch (System.Exception e)
{
// throw e;
string eMessage=e.Message.ToString();
int indexLeft=eMessage.IndexOf("重复键值为 (")+7;
int indexRight=eMessage.IndexOf(")。");
int strLength = indexRight- indexLeft;
if (indexLeft!= -1)
{
throw new Exception("批量导入失败,存在重复记录:"+eMessage.Substring(indexLeft,strLength));
}
else
{
throw e;
} }
finally
{
conn.Close();
}
}
}
}

2.重复字段处理

直接报错或参考yudehui网友采用递归思想的跳过重复行继续复制

SqlBulkCopy 批量复制数据到数据库的更多相关文章

  1. (转)SqlBulkCopy批量复制数据

    在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而 在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们 ...

  2. SqlBulkCopy 批量复制数据到数据表

    使用 SqlBulkCopy 类只能向 SQL Server 表写入数据.但是,数据源不限于 SQL Server:可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataR ...

  3. C# 使用 SqlBulkCopy 类批量复制数据到数据库

    最近公司需要优化导入的问题,由于之前使用的方式是生成 Insert 语句插入数据库,数据量小的时候还行,但是随着发展数据量渐渐大了,之前的方法性能就跟不上了,于是发现了 SqlBulkCopy 这个类 ...

  4. 用.net中的SqlBulkCopy类批量复制数据 (转载)

    在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. .NET 2.0有一个SqlBulkC ...

  5. 使用asp.net 2.0中的SqlBulkCopy类批量复制数据

    介绍:在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个Sq ...

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

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

  7. SqlBulkCopy(批量复制)使用方法

    SqlBulkCopy提供了一种将数据复制到Sql Server数据库表中高性能的方法.SqlBulkCopy 包含一个方法 WriteToServer,它用来从数据的源复制数据到数据的目的地. Wr ...

  8. SqlBulkCopy(批量复制)使用方法 && SqlDataAdapter Update

    SqlBulkCopy提供了一种将数据复制到Sql Server数据库表中高性能的方法.SqlBulkCopy 包含一个方法 WriteToServer,它用来从数据的源复制数据到数据的目的地. Wr ...

  9. SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

    原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...

随机推荐

  1. python中的string

    也可以用一个变量来保存字符串,然后输出str = ‘bad’print str 如果你想表示一段带有英文单引号或者双引号的文字,那么表示这个字符串的引号就要与内容区别开. 内容带有单引号,就用双引号表 ...

  2. 高可用Redis服务架构分析与搭建

    基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量 ...

  3. 恢复linux系统文件夹颜色

    /etc/DIR_COLORS 默认值 # Background color codes:# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta ...

  4. 洛谷P1962 斐波那契数列【矩阵运算】

    洛谷P1962 斐波那契数列[矩阵运算] 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) ( ...

  5. oracle12c各个版本对其需要的依赖包及系统参数的修改

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 以下是我在oracle官网上对oracle12c 各个版本的依赖包需 ...

  6. 五分钟了解Hash算法

    Hash算法详解 想象一下如果高级语言(Java,C++ ,C#)中如果没有实现类似List.Map等数据结构,企业级应用开发将是多么痛苦的事吧? Key-Value这种数据结构对于数据处理非常方便. ...

  7. Batch Normalization&Dropout浅析

    一. Batch Normalization 对于深度神经网络,训练起来有时很难拟合,可以使用更先进的优化算法,例如:SGD+momentum.RMSProp.Adam等算法.另一种策略则是高改变网络 ...

  8. yaf框架学习文件配置

    文件配置: 在配置php支持yaf的时候,可以设置一个参数yaf.environ:把本地开发设置成develop.测试环境配置成test.生产环境配置成product. [yaf] extension ...

  9. 多key业务,数据库水平切分架构一次搞定

    数据库水平切分是一个很有意思的话题,不同业务类型,数据库水平切分的方法不同. 本篇将以"订单中心"为例,介绍"多key"类业务,随着数据量的逐步增大,数据库性能 ...

  10. css进行中打点效果

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...