SqlBulkCopy 批量复制数据到数据库
1.简介
1.MSDN
核心方法:SqlBulkCopy.WriteToServer
将所有行从数据源复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中.
2.一句话介绍
将DataTable或DataRow中的数据直接复制到数据库中指定的表中
3.注意事项
- 表名、列名对大小写敏感
- DataTable的架构必须和目标表保持一致(最常出的错误就是列顺序不一致)
- DataTable中int类型的字段如果为NULL,必须对其赋值为 DBNull.Value
- 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 批量复制数据到数据库的更多相关文章
- (转)SqlBulkCopy批量复制数据
在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而 在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们 ...
- SqlBulkCopy 批量复制数据到数据表
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据.但是,数据源不限于 SQL Server:可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataR ...
- C# 使用 SqlBulkCopy 类批量复制数据到数据库
最近公司需要优化导入的问题,由于之前使用的方式是生成 Insert 语句插入数据库,数据量小的时候还行,但是随着发展数据量渐渐大了,之前的方法性能就跟不上了,于是发现了 SqlBulkCopy 这个类 ...
- 用.net中的SqlBulkCopy类批量复制数据 (转载)
在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. .NET 2.0有一个SqlBulkC ...
- 使用asp.net 2.0中的SqlBulkCopy类批量复制数据
介绍:在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个Sq ...
- sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )
通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下. 其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...
- SqlBulkCopy(批量复制)使用方法
SqlBulkCopy提供了一种将数据复制到Sql Server数据库表中高性能的方法.SqlBulkCopy 包含一个方法 WriteToServer,它用来从数据的源复制数据到数据的目的地. Wr ...
- SqlBulkCopy(批量复制)使用方法 && SqlDataAdapter Update
SqlBulkCopy提供了一种将数据复制到Sql Server数据库表中高性能的方法.SqlBulkCopy 包含一个方法 WriteToServer,它用来从数据的源复制数据到数据的目的地. Wr ...
- SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法
原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...
随机推荐
- HTML标签的命名/CSS标准化命名大全
在一个内容较多的HTML页面中,需要设计许多不同的框架,再为这些不同的框架及内容进行分类,给予相应的名称,从而使得网页结构更加清晰,也为工作提供了方便.许多新手朋友在设计一个HTML文件时,可能只会依 ...
- 在 Mac 中安装 MySQLdb (Python mysql )
安装环境:OS X操作系统,Python 2.7.3. MySQLdb其实包含在MySQL-python包中,因此无论下载还是在pip中search,都应该是搜寻MySQL-python. 以下将说明 ...
- CodeForces 586D
题意略. 将人的移动分为3步,第一步向右,第二步是行之间的变换,第三步是向右走2步,三步加在一起算作是一次移动,计入判重数组. 在第一步时有一个特殊情况:已经越过最右边的边界线,这时graph[x][ ...
- JetBrains Rider 破解 (ideaIU等等开发工具都通用)2018-02-27
贴一下Rider下载地址:(下载不了可以用百度云离线下载) Win:https://download.jetbrains.com/resharper/JetBrains.Rider-2017.3.1. ...
- 【Unity3D技术文档翻译】第1.5篇 本地使用 AssetBundles
上一章:[Unity3D技术文档翻译]第1.4篇 AssetBundle 依赖关系 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Devel ...
- 重磅发布:《阿里巴巴Android开发手册(规约)》
1.前言 阿里巴巴于近日为广大程序员再送上重磅开春好礼:<阿里巴巴Android开发手册(规约)>.该开发规范在阿里内部经过了长期的修缮,现已总结成册,向所有移动开发者.技术爱好者开放,希 ...
- hbase优化之region合并和压缩
HBASE操作:(一般先合并region然后再压缩) 一 .Region合并: merge_region 'regionname1','regionname2' ,'true' --true代表 ...
- RHEL6误安装RHEL7的包导致glibc被升级后系统崩溃处理方法
RHEL6误使用了RHEL7的光盘源,安装了某个RPM包之后,导致glibc被升级,进而导致系统崩溃. [root@rhel65 ~]# yum install ftp Loaded plugin ...
- struts2标签库----数据标签详解
上篇文章我们介绍struts2标签库中的控制标签的基本使用和部分原理,本篇文章接着了解下标签库中有关数据标签的使用和原理.主要涉及以下数据标签: action标签:用于在视图页面跳转到一个Action ...
- Storm日志分析调研及其实时架构
1.Storm第一个Demo 2.Windows下基于eclipse的Storm应用开发与调试 3.Storm实例+mysql数据库保存 4.Storm原理介绍 5. flume+kafka+stor ...