一、功能说明

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类批量导入 测试的更多相关文章

  1. C# SqlBulkCopy类批量导入数据

    特别注意  sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); 插入的时候列的顺序可 ...

  2. 关于SqlBulkCopy SQL批量导入需要注意,列名是区分大小写的

    最近在做数据从Excel批量导入MSSQL时,传统的是使用Insert Into Table方法,不过这个方便比较慢 通过使用 SqlBulkCopy 可以批量导入到数据库. 默认批量导入数据库,需要 ...

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

    用途说明: 前些日子,公司要求做一个数据导入程序,要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储.于是在网上进行查找,发现了一个比较好的解决方案,就是采用S ...

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

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

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

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

  6. 使用SqlBulkCopy类实现导入excel表格

    前言: 上篇博客介绍了SqlBulkCopy类批量操作数据库的相关操作,最后提到了可以使用这个类实现excel文件导入数据库,接下来我做简单介绍. 首先说一下思路: 把excel中的数据读出来并放入到 ...

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

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

  8. .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库

    批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...

  9. 使用SqlBulkCopy类批量复制大数据

    using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using Syst ...

随机推荐

  1. java常见面试题及部分答案

    1.Redis常见的存储数据类型 list(列表类型) set(集合类型) zset(有序集合类型) string(字符串类型) hash(散装类型) 2.log4j的级别 debug:日志的最低级别 ...

  2. Ansible工具原理一

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命 ...

  3. python 安装 reportlab 报错 “ImportError: No module named reportlab.lib”

    reportlab是什么? 是一个处理PDF和画图的python开源库. 初次安装: pip install reportlab 重新安装: pip install --upgrade --force ...

  4. git gc和fsck的用法

    一.保证git良好的性能 在大的仓库中, git靠压缩历史信息来节约磁盘和内存空间. 压缩操作并不是自动进行的, 你需要手动执行 git gc: $ git gc 压缩操作比较耗时, 你运行git g ...

  5. 小程序解析html之富文本插件wxParse

    近期,开发小程序时,遇到后台给我返回了一串html代码,需要我这边来解析,头疼了好久,网上找资料找了变天,终于找到wxParse,然而看到的都是针对于页面中有单个html或者固定数据的,我现在的问题是 ...

  6. 【design patterns】设计模式

    1.单例设计模式(singleton) 用途举例:对于多个程序使用同一个配置信息对象时比如在连接数据库时使用单例模式,每次只取出一个连接 步骤:①私有化该类的构造函数 ②私有化一个静态的对象 ③公有化 ...

  7. 如何用chrome注册版权登记系统

    版权登记系统的网址: http://apply.ccopyright.com.cn/goadatadic/registergetList.do 打开网站,一股古朴的气息扑面而来,嗯,一看就是IE时代的 ...

  8. 全网最详细的一款满足多台电脑共用一个鼠标和键盘的工具Synergy(图文详解)

    不多说,直接上干货! 前言 如今无论你是在公司做大数据开发还是实验室里搞科研,这个软件确实好用,作为正在通往大数据架构师路上的我们没有几台电脑怎么行?台式机.笔记本,都放在写字台上,笔记本内置键盘鼠标 ...

  9. Elasticsearch基本概念及核心配置文件详解

    Elasticsearch5.X,下列的是Elasticsearch2.X系类配置,其实很多配置都是相互兼容的 1. 配置文件 config/elasticsearch.yml 主配置文件 confi ...

  10. shiro 获取请求头中的 sessionId

    前言: 在前后端项目中, 前端有可能会要求, 后台返回一个 sessionId 给他, 然后他在请求后台接口时, 把这个sessionId 带给后台, 后台拿到这个sessionId , 就能识别, ...