C# SqlBulkCopy类批量导入 测试
一、功能说明
1、可以选择,只导入部分列,或者导入全部列。
2、导入速度的确比一般sql要快。
3、不用写sql语句
---------------------------------------------------------
4、导入数据库 须 将字段对应关系做好配置,否则很有可能导入数据库的数据,字段顺序问题出错。
----------------------------------------------------------------------------------------
二、C#导入代码
/// <summary>
///
/// </summary>
/// <param name="connectionString">目标连接字符</param>
/// <param name="TableName">目标表</param>
/// <param name="dt">源数据</param>
private void SqlBulkCopyByDatatable(string connectionString, string TableName, DataTable dt)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
using (SqlBulkCopy sqlbulkcopy =new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction))
{
try
{
sqlbulkcopy.DestinationTableName = TableName;
for (int i = ; i < dt.Columns.Count; i++)
{
sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
}
sqlbulkcopy.WriteToServer(dt);
}
catch (System.Exception ex)
{
throw ex;
}
}
}
}
三、测试
3.1 数据库建表
CREATE TABLE temp
(
test1 varchar(30),
test2 varchar(30),
test3 varchar(30),
test4 varchar(30),
test5 varchar(30),
test6 varchar(30)
)
3.2 C# 代码,测试 DataTabe比数据库表少一个字段,执行插入数据库也少做一个对应关系。
private void button1_Click(object sender, EventArgs e)
{
SqlBulkCopyByDatatable(dt);
} private void Form1_Load(object sender, EventArgs e)
{
/*
* 这里 test1 字段不添加字段,待会看执行Copy 会出错
*/
dt = new DataTable();
dt.Columns.Add("test2", System.Type.GetType("System.String"));
dt.Columns.Add("test3", System.Type.GetType("System.String"));
dt.Columns.Add("test4", System.Type.GetType("System.String"));
dt.Columns.Add("test5", System.Type.GetType("System.String"));
dt.Columns.Add("test6", System.Type.GetType("System.String"));
//添加行数据
for (int i = ; i < ; i++)
{
DataRow dr = dt.NewRow();
dr["test2"] = "test2";
dr["test3"] = "test3";
dr["test4"] = "test4";
dr["test5"] = "test5";
dr["test6"] = "test6";
dt.Rows.Add(dr);
}
this.dataGridView1.DataSource = dt;
} /// <summary>
///
/// </summary>
/// <param name="connectionString">目标连接字符</param>
/// <param name="TableName">目标表</param>
/// <param name="dt">源数据</param>
private void SqlBulkCopyByDatatable(DataTable dt)
{
using (SqlConnection conn = new SqlConnection("data source=10.8.88.23;uid=sa;pwd=3434356@ert;database=SDIW;"))
{
using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy("data source=10.8.88.23;uid=sa;pwd=3434356@ert;database=SDIW;", SqlBulkCopyOptions.UseInternalTransaction))
{
try
{
sqlbulkcopy.DestinationTableName = "temp";
for (int i = ; i < dt.Columns.Count; i++)
{
sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
}
sqlbulkcopy.WriteToServer(dt);
}
catch (System.Exception ex)
{
throw ex;
}
}
}
}
执行结果无异常。

3.3 数据库表中 的“test1” 列 DataTable 没有,DataTable 中“test7” 数据库没有,对应关系 只关联双方共有的列。
private void button1_Click(object sender, EventArgs e)
{
SqlBulkCopyByDatatable(dt);
} private void Form1_Load(object sender, EventArgs e)
{
/*
* 这里 test1 字段不添加字段,待会看执行Copy 会出错
* 新增 test7 列 ,数据库中没有 ‘test7’ 这一列
*/
dt = new DataTable();
dt.Columns.Add("test2", System.Type.GetType("System.String"));
dt.Columns.Add("test3", System.Type.GetType("System.String"));
dt.Columns.Add("test4", System.Type.GetType("System.String"));
dt.Columns.Add("test5", System.Type.GetType("System.String"));
dt.Columns.Add("test6", System.Type.GetType("System.String"));
dt.Columns.Add("test7", System.Type.GetType("System.String"));
//添加行数据
for (int i = ; i < ; i++)
{
DataRow dr = dt.NewRow();
dr["test2"] = "test2";
dr["test3"] = "test3";
dr["test4"] = "test4";
dr["test5"] = "test5";
dr["test6"] = "test6";
dr["test7"] = "test7";
dt.Rows.Add(dr);
}
this.dataGridView1.DataSource = dt;
} /// <summary>
///
/// </summary>
/// <param name="connectionString">目标连接字符</param>
/// <param name="TableName">目标表</param>
/// <param name="dt">源数据</param>
private void SqlBulkCopyByDatatable(DataTable dt)
{
using (SqlConnection conn = new SqlConnection("data source=10.8.88.23;uid=sa;pwd=3434356@ert;database=SDIW;"))
{
using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy("data source=10.8.88.23;uid=sa;pwd=3434356@ert;database=SDIW;", SqlBulkCopyOptions.UseInternalTransaction))
{
try
{
/*
* 字段对应关系绑定,只绑定双方共有的。
*/
sqlbulkcopy.DestinationTableName = "temp";
sqlbulkcopy.ColumnMappings.Add("test2", "test2");
sqlbulkcopy.ColumnMappings.Add("test3", "test3");
sqlbulkcopy.ColumnMappings.Add("test4", "test4");
sqlbulkcopy.ColumnMappings.Add("test5", "test5");
sqlbulkcopy.ColumnMappings.Add("test6", "test6");
//for (int i = 0; i < dt.Columns.Count; i++)
//{
// sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
//}
sqlbulkcopy.WriteToServer(dt);
}
catch (System.Exception ex)
{
throw ex;
}
}
}
}
sql数据库插入数据 正常,C#代码没有报错:

3.4 打乱Datatable 列的顺序,不添加字段对应关系,数据库中导入数据错位。
private void button1_Click(object sender, EventArgs e)
{
SqlBulkCopyByDatatable(dt);
} private void Form1_Load(object sender, EventArgs e)
{
/*
* 这里 test1 字段不添加字段,待会看执行Copy 会出错
* 新增 test7 列 ,数据库中没有 ‘test7’ 这一列
* 打乱 每一列的对应关系
*/
dt = new DataTable();
dt.Columns.Add("test5", System.Type.GetType("System.String"));
dt.Columns.Add("test6", System.Type.GetType("System.String"));
dt.Columns.Add("test7", System.Type.GetType("System.String"));
dt.Columns.Add("test2", System.Type.GetType("System.String"));
dt.Columns.Add("test3", System.Type.GetType("System.String"));
dt.Columns.Add("test4", System.Type.GetType("System.String"));
//添加行数据
for (int i = ; i < ; i++)
{
DataRow dr = dt.NewRow();
dr["test5"] = "test5";
dr["test6"] = "test6";
dr["test7"] = "test7";
dr["test2"] = "test2";
dr["test3"] = "test3";
dr["test4"] = "test4";
dt.Rows.Add(dr);
}
this.dataGridView1.DataSource = dt;
} /// <summary>
///
/// </summary>
/// <param name="connectionString">目标连接字符</param>
/// <param name="TableName">目标表</param>
/// <param name="dt">源数据</param>
private void SqlBulkCopyByDatatable(DataTable dt)
{
using (SqlConnection conn = new SqlConnection("data source=10.8.88.23;uid=sa;pwd=3434356@ert;database=SDIW;"))
{
using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy("data source=10.8.88.23;uid=sa;pwd=3434356@ert;database=SDIW;", SqlBulkCopyOptions.UseInternalTransaction))
{
try
{
/*
* 字段对应关系绑定,只绑定双方共有的。
*/
sqlbulkcopy.DestinationTableName = "temp";
//sqlbulkcopy.ColumnMappings.Add("test2", "test2");
//sqlbulkcopy.ColumnMappings.Add("test3", "test3");
//sqlbulkcopy.ColumnMappings.Add("test4", "test4");
//sqlbulkcopy.ColumnMappings.Add("test5", "test5");
//sqlbulkcopy.ColumnMappings.Add("test6", "test6");
//for (int i = 0; i < dt.Columns.Count; i++)
//{
// sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
//}
sqlbulkcopy.WriteToServer(dt);
}
catch (System.Exception ex)
{
throw ex;
}
}
}
}
数据正常导入数据库,但是存在数据问题,顺序错乱。

C# SqlBulkCopy类批量导入 测试的更多相关文章
- C# SqlBulkCopy类批量导入数据
特别注意 sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); 插入的时候列的顺序可 ...
- 关于SqlBulkCopy SQL批量导入需要注意,列名是区分大小写的
最近在做数据从Excel批量导入MSSQL时,传统的是使用Insert Into Table方法,不过这个方便比较慢 通过使用 SqlBulkCopy 可以批量导入到数据库. 默认批量导入数据库,需要 ...
- C# 使用SqlBulkCopy类批量复制大数据
用途说明: 前些日子,公司要求做一个数据导入程序,要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储.于是在网上进行查找,发现了一个比较好的解决方案,就是采用S ...
- 用.net中的SqlBulkCopy类批量复制数据 (转载)
在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. .NET 2.0有一个SqlBulkC ...
- 使用asp.net 2.0中的SqlBulkCopy类批量复制数据
介绍:在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个Sq ...
- 使用SqlBulkCopy类实现导入excel表格
前言: 上篇博客介绍了SqlBulkCopy类批量操作数据库的相关操作,最后提到了可以使用这个类实现excel文件导入数据库,接下来我做简单介绍. 首先说一下思路: 把excel中的数据读出来并放入到 ...
- C# 使用 SqlBulkCopy 类批量复制数据到数据库
最近公司需要优化导入的问题,由于之前使用的方式是生成 Insert 语句插入数据库,数据量小的时候还行,但是随着发展数据量渐渐大了,之前的方法性能就跟不上了,于是发现了 SqlBulkCopy 这个类 ...
- .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库
批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...
- 使用SqlBulkCopy类批量复制大数据
using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using Syst ...
随机推荐
- 腾迅云获取免费SSL证书并布置
上次申请了SSL证书一直没时间布置,今天重新再来操作一次 首先需要申请SSL证书,腾迅云买的域名有免费一年的SSL证书申请,网址:https://console.cloud.tencent.com/s ...
- 每天学点SpringCloud(十二):Zipkin全链路监控
Zipkin是SpringCloud官方推荐的一款分布式链路监控的组件,使用它我们可以得知每一个请求所经过的节点以及耗时等信息,并且它对代码无任何侵入,我们先来看一下Zipkin给我们提供的UI界面都 ...
- 基于 jq 实现拖拽上传 APK 文件,js解析 APK 信息
技术栈 jquery 文件上传:jquery.fileupload,github 文档 apk 文件解析:app-info-parser,github 文档 参考:前端解析ipa.apk安装包信息 - ...
- LeetCode:1_Two_Sum | 两个元素相加等于目标元素 | Medium
题目: Given an array of integers, find two numbers such that they add up to a specific target number. ...
- rest-framework之APIView 序列化组件
rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...
- 多线程编程学习笔记——使用异步IO
接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...
- SpringCloud2.0入门3-新的eureka依赖
前言 Springboot2.0推出有一段时间了,是要学习1.5+还是从2.0开始?犹豫的原因是资料不全,目前现有的资料大部分是1.0的.但作为学习者,肯定要学习最新的.不如,先试试. 搭建Eurek ...
- LINUX服务器搭建和常用配置介绍
服务器搭建 : 搭建私有CA服务器 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_011_ca.html搭建samba服务器 : h ...
- 菜鸟系列docker——docker镜像上(3)
1. 镜像image 镜像和容器的关系就和安装包和程序的关系一样,有了镜像才可以启动容器,容器是镜像的一个运行实例. 1.1 镜像的结构 通过第二节仓库,可能很多看官已经查看到镜像是分层的,接下来将对 ...
- Linux常用命令之链接命令和权限管理命令
目录 1.链接命令 一.生成链接文件命令:ln 2.权限管理命令3.总结 一.更改文件或目录权限命令:chmod 二.改变文件或目录所有者命令:chown 三.改变文件或目录所属组命令:chgrp 四 ...