C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据
#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往数据库中批量插入数据的更多相关文章
- SqlBulkCopy与触发器,批量插入表(存在则更新,不存在则插入)
临时表:Test /****** 对象: Table [dbo].[Test] 脚本日期: 05/10/2013 11:42:07 ******/ SET ANSI_NULLS ON GO SET Q ...
- MyBatis向数据库中批量插入数据
Foreach标签 foreach: collection:指定要遍历的集合; 表示传入过来的参数的数据类型.该参数为必选.要做 foreach 的对象,作为入参时,List 对象默认用 list 代 ...
- SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int
--SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...
- 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本
解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar. 操作说明:打开SQL Se ...
- SQLserver删除某数据库中所有表 方法 二
方便删除数据库中所有的数据表,清空数据库,有些有约束,不能直接delete,需要先删除库中的约束,代码如下: --删除所有约束DECLARE c1 cursor for select 'alter t ...
- ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据
ABP默认的数据库是SQLServer,不过ABP框架底层是EF框架,因此也是很容易支持其他类型的数据库的,本篇随笔介绍在ABP框架使用Mysql数据库,以及基于SQLServer创建MySql数据库 ...
- [SQL]复制数据库某一个表到另一个数据库中
SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * I ...
- SpringBoot集成mybatis,同时读取一个数据库中多个数据表
SpringBoot集成mybatis,同时读取一个数据库中多个数据表: application.properties: mybatis.config-location=classpath:mybat ...
- MySQL 查询某个数据库中所有包含数据记录的表名
MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...
随机推荐
- HDU 1890--Robotic Sort(Splay Tree)
题意:每次找出第i大的数的位置p输出,然后将i~p之间的数反转. 题解:每次把要的区间转成一棵子树,然后更新.因为每次将第i小的数转到了了i,所以k次操作后,可知前k个数一定是最小的那k个数,所以以后 ...
- hdoj 1262 寻找素数对
寻找素数对 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- [iOS基础控件 - 6.4] 汽车品牌展示 Model嵌套/KVC/TableView索引
A.需求 1.使用汽车品牌名称头字母为一个Model,汽车品牌为一个Model,头字母Model嵌套品牌Model 2.使用KVC进行Model封装赋值 3.展示头字母标题 4.展示索引(使用KVC代 ...
- css控制内容显示,自动加"..."
.css{ overflow:hidden; white-space:nowrap; text-overflow:ellipsis; width:100px; } c ...
- WIN7 如何关闭Aero
控制面板-性能信息和工具-调整视觉效果-视觉效果 里面选择 调整为最佳性能,这样就关闭了win7的Aero特效
- 用EPOLL进行压力测试
在以前的博客中提到的一个服务端,在以前压力测试的过程中,发现单核CPU最多能达到1000TPS 还以为是服务端性能不够好,所以一直想着怎么去优化它. 但优化的思路明显不多,所以就考虑换一种压力测试的方 ...
- 幻灯片(jquery实现)
html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- Oracle- 日期加减
加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate,1 ...
- Ajax调用WebService(一)
Ajax调用WebService(一) http://www.cnblogs.com/leslies2/archive/2011/01/26/1934889.html 分类: Ajax 使用技术 We ...
- 拼接json示例 json分页并显示所有页码
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%&g ...