#region 帮助实例:SQL 批量插入数据 多种方法
/// <summary>
/// SqlBulkCopy往数据库中批量插入数据
/// </summary>
/// <param name="sourceDataTable">数据源表</param>
/// <param name="targetTableName">服务器上目标表</param>
/// <param name="mapping">创建新的列映射,并使用列序号引用源列和目标列的列名称。</param>
public static void BulkToDB(DataTable sourceDataTable, string targetTableName, SqlBulkCopyColumnMapping[] mapping)
{
/* 调用方法 -2012年11月16日编写
//DataTable dt = Get_All_RoomState_ByHID();
//SqlBulkCopyColumnMapping[] mapping = new SqlBulkCopyColumnMapping[4];
//mapping[0] = new SqlBulkCopyColumnMapping("Xing_H_ID", "Xing_H_ID");
//mapping[1] = new SqlBulkCopyColumnMapping("H_Name", "H_Name");
//mapping[2] = new SqlBulkCopyColumnMapping("H_sName", "H_sName");
//mapping[3] = new SqlBulkCopyColumnMapping("H_eName", "H_eName");
//BulkToDB(dt, "Bak_Tts_Hotel_Name", mapping);
*/
SqlConnection conn = new SqlConnection(SQLHelper.ConnectionString);
SqlBulkCopy bulkCopy = new SqlBulkCopy(conn); //用其它源的数据有效批量加载sql server表中
bulkCopy.DestinationTableName = targetTableName; //服务器上目标表的名称
bulkCopy.BatchSize = sourceDataTable.Rows.Count; //每一批次中的行数

try
{
conn.Open();
if (sourceDataTable != null && sourceDataTable.Rows.Count != 0)
{
for (int i = 0; i < mapping.Length; i++)
bulkCopy.ColumnMappings.Add(mapping[i]);

//将提供的数据源中的所有行复制到目标表中
bulkCopy.WriteToServer(sourceDataTable );
}
}
catch (Exception ex)
{
//throw ex;
Common.WriteTextLog("BulkToDB", ex.Message);
}
finally
{
conn.Close();
if (bulkCopy != null)
bulkCopy.Close();
}
}
/// <summary>
/// SQL2008以上方可支持自定义表类型 :调用存储过程游标-往数据库中批量插入数据 ,注意
/// </summary>
/// <param name="sourceDataTable"></param>
public void DataTableToHotelDB(DataTable sourceDataTable)
{
/* -2012年11月15日编写
ALTER PROCEDURE [dbo].[P_InsertSubject]
@tempStudentID int
AS
DECLARE rs CURSOR LOCAL SCROLL FOR
select H_ID from Tts_Hotel_Name
OPEN rs
FETCH NEXT FROM rs INTO @tempStudentID
WHILE @@FETCH_STATUS = 0
BEGIN
Insert student (tempStudentID) values (@tempStudentID)
FETCH NEXT FROM rs INTO @tempStudentID
END
CLOSE rs
* ***************************************************************
* create table Orders
(
Orders_ID int identity(1,1) primary key,
ItemCode nvarchar(50) not null,
UM nvarchar(20) not null,
Quantity decimal(18,6) not null,
UnitPrice decimal(18,6) not null
)

--创建用户自定义表类型,在可编程性->类型性->用户自定义表类型
create type OrdersTableType as table
(
ItemCode nvarchar(50) not null,
UM nvarchar(20) not null,
Quantity decimal(18,6) not null,
UnitPrice decimal(18,6) not null
)
go

create procedure Pro_Orders
(
@OrdersCollection OrdersTableType readonly
)
as
insert into Orders([ItemCode],[UM],[Quantity],[UnitPrice])
SELECT oc.[ItemCode],oc.[UM],[Quantity],oc.[UnitPrice] FROM @OrdersCollection AS oc;

go
*
*/

SqlParameter[] parameters = {new SqlParameter("@OrdersCollection", SqlDbType.Structured)};
parameters[0].Value = sourceDataTable;
new SQLHelper().ExecuteScalar("P_DataTable_ToHotelDB", parameters, true);
}
#endregion

#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中
/// <summary>
/// 使用SqlBulkCopy将DataTable中的数据批量插入数据库中
/// </summary>
/// <param name="strTableName">数据库中对应的表名</param>
/// <param name="dtData">数据集</param>
public void SqlBulkCopyInsert(string strTableName, DataTable dtData)
{
string ConStr = connectionString;// 数据库连接字符串

try
{
using (SqlBulkCopy sqlRevdBulkCopy = new SqlBulkCopy(ConStr))//引用SqlBulkCopy
{
sqlRevdBulkCopy.DestinationTableName = strTableName;//数据库中对应的表名

sqlRevdBulkCopy.NotifyAfter = dtData.Rows.Count;//有几行数据

sqlRevdBulkCopy.WriteToServer(dtData);//数据导入数据库

sqlRevdBulkCopy.Close();//关闭连接
}
}
catch (Exception ex)
{
WriteErrorLog(ex.Message + "数据库处理出错654行。SqlBulkCopyInsert");
throw (ex);
}
}
#endregion

private static void DataTableToSQLServer( DataTable dt)
{
string connectionString = GetConnectionString();

using (SqlConnection destinationConnection =new SqlConnection(connectionString))
{
destinationConnection.Open();

using (SqlBulkCopy bulkCopy =new SqlBulkCopy(destinationConnection))
{

try
{

bulkCopy.DestinationTableName = "T_EIInformation";//要插入的表的表明
bulkCopy.ColumnMappings.Add("Email", "Email");//映射字段名 DataTable列名 ,数据库 对应的列名
bulkCopy.ColumnMappings.Add("author", "author");
bulkCopy.ColumnMappings.Add("Title", "Title");
bulkCopy.ColumnMappings.Add("Type", "Type");
bulkCopy.ColumnMappings.Add("confName", "confName");
bulkCopy.ColumnMappings.Add("Language", "Language");
bulkCopy.ColumnMappings.Add("Publicationyear", "Publicationyear");
bulkCopy.ColumnMappings.Add("Conferencelocation", "Conferencelocation");
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
// Close the SqlDataReader. The SqlBulkCopy
// object is automatically closed at the end
// of the using block.

}
}

}

}

C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据的更多相关文章

  1. SqlBulkCopy与触发器,批量插入表(存在则更新,不存在则插入)

    临时表:Test /****** 对象: Table [dbo].[Test] 脚本日期: 05/10/2013 11:42:07 ******/ SET ANSI_NULLS ON GO SET Q ...

  2. MyBatis向数据库中批量插入数据

    Foreach标签 foreach: collection:指定要遍历的集合; 表示传入过来的参数的数据类型.该参数为必选.要做 foreach 的对象,作为入参时,List 对象默认用 list 代 ...

  3. SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int

    --SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...

  4. 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本

    解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar. 操作说明:打开SQL Se ...

  5. SQLserver删除某数据库中所有表 方法 二

    方便删除数据库中所有的数据表,清空数据库,有些有约束,不能直接delete,需要先删除库中的约束,代码如下: --删除所有约束DECLARE c1 cursor for select 'alter t ...

  6. ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据

    ABP默认的数据库是SQLServer,不过ABP框架底层是EF框架,因此也是很容易支持其他类型的数据库的,本篇随笔介绍在ABP框架使用Mysql数据库,以及基于SQLServer创建MySql数据库 ...

  7. [SQL]复制数据库某一个表到另一个数据库中

    SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * I ...

  8. SpringBoot集成mybatis,同时读取一个数据库中多个数据表

    SpringBoot集成mybatis,同时读取一个数据库中多个数据表: application.properties: mybatis.config-location=classpath:mybat ...

  9. MySQL 查询某个数据库中所有包含数据记录的表名

    MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...

随机推荐

  1. BNUOJ-26482 Juice 树形DP

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26482 题意:给一颗树,根节点为送电站,可以无穷送电,其它节点为house,电量达到pi时 ...

  2. Getting Started with OWIN and Katana(Console 代替iis 制作 web服务的简单方案)

    Open Web Interface for .NET (OWIN) defines an abstraction between .NET web servers and web applicati ...

  3. HDU 5710 Digit-Sum (构造)

    题意: 定义S(N) 为数字N每个位上数字的和.在给两个数a,b,求最小的正整数n,使得 a×S(n)=b×S(2n). 官方题解: 这道题目的结果可能非常大,所以我们直接枚举n是要GG的. 首先可以 ...

  4. 将Sublime Text 2搭建成一个好用的IDE

    将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2 ...

  5. jquery.layout框架分割线

    css <link href="${base}/res/common/css/jquery.layout/jquery.layout.css" rel="style ...

  6. 【转】Netty那点事(三)Channel中的Pipeline

    [原文]https://github.com/code4craft/netty-learning/blob/master/posts/ch3-pipeline.md Channel是理解和使用Nett ...

  7. MVC返回http状态码

    //controller ); //asp.net return HttpStatusCode.OK

  8. OpenResty

  9. 大作业 XXX大学 课程管理系统

    #include<stdio.h> #include<iostream> #include<string.h> #include <fstream> # ...

  10. Mysql 5.5 replication 多数据库主从备份Master-Slave配置总结

    配置Mysql server 5.5 的双机备份,也就是master-slave模式.本例子还是一个多database复制的情况. 现在有两个database在同一台mysql server,也就是m ...