MSSQL使用sqlbulkcopy批量插入数据
具体代码如下:
/// <summary>
/// 批量插入数据到BayonetZipFailedPic表
/// </summary>
/// <param name="bayonetFailedPicList">含有多条拷贝失败的二次卡口图片数据的集合</param>
/// <returns>0-成功,-2-异常,其他-失败</returns>
public int BatchAddBayonetZipFailedPic(List<BayonetZipFailedPic> bayonetFailedPicList)
{
int result = ;
try
{
DataTable dataTable = GetBayonetZipFailedPicTableSchema();
foreach (BayonetZipFailedPic bayonetFailedPic in bayonetFailedPicList)
{
DataRow dataRow = dataTable.NewRow();
dataRow[] = bayonetFailedPic.ZipFileID;
dataRow[] = bayonetFailedPic.FileOriName;
dataRow[] = bayonetFailedPic.FileFullPath;
dataRow[] = System.DateTime.Now;//bayonetPic.OperateTime; dataTable.Rows.Add(dataRow);
}
return BatchAddBayonetZipFailedPic(dataTable, "BayonetZipFailedPic");
}
catch (Exception exception)
{
logger.Error("批量插入BayonetZipFailedPic数据异常!", exception);
result = -;
}
return result;
} /// <summary>
/// 创建和BayonetPic表对应的DataTable对象
/// </summary>
/// <returns>DataTable对象</returns>
private static DataTable GetBayonetPicTableSchema()
{
DataTable dataTable = new DataTable();
dataTable.Columns.AddRange(new DataColumn[] { new DataColumn("ID"), new DataColumn("FolderID",typeof(System.Data.SqlTypes.SqlGuid)), new DataColumn("FileOriName"),
new DataColumn("FileName"), new DataColumn("FileFullPath"), new DataColumn("Longitude"),new DataColumn("Latitude"),new DataColumn("Address"),new DataColumn("Contacts"), new DataColumn("ContactWay"), new DataColumn("PicStartTime"),
new DataColumn("PicEndTime"), new DataColumn("OperateTime"), new DataColumn("Status"),new DataColumn("Width"),new DataColumn("Height")}); return dataTable;
} /// <summary>
/// 批量插入数据到BayonetPic表
/// </summary>
/// <param name="bayonetPicList">含有多条二次卡口图片数据的集合</param>
/// <returns>0-成功,-2-异常,其他-失败</returns>
public int BatchAddBayonetPic(List<BayonetPic> bayonetPicList)
{
int result = ;
try
{
DataTable dataTable = GetBayonetPicTableSchema();
foreach (BayonetPic bayonetPic in bayonetPicList)
{
DataRow dataRow = dataTable.NewRow();
dataRow[] = new Guid(bayonetPic.FolderID);
dataRow[] = bayonetPic.FileOriName;
dataRow[] = bayonetPic.FileName;
dataRow[] = bayonetPic.FileFullPath;
dataRow[] = bayonetPic.Longitude;
dataRow[] = bayonetPic.Latitude;
dataRow[] = bayonetPic.Address;
dataRow[] = bayonetPic.Contacts;
dataRow[] = bayonetPic.ContactWay;
dataRow[] = bayonetPic.PicStartTime;
dataRow[] = bayonetPic.PicEndTime;
dataRow[] = System.DateTime.Now;//bayonetPic.OperateTime;
dataRow[] = bayonetPic.Status;
dataRow[] = bayonetPic.Width;
dataRow[] = bayonetPic.Height;
dataTable.Rows.Add(dataRow);
}
return BatchAddBayonetPic(dataTable, "BayonetPic");
}
catch (Exception exception)
{
logger.Error("批量插入BayonetPic数据异常!", exception);
result = -;
}
return result;
} private int BatchAddBayonetPic(DataTable dt, string tableName)
{
int result = ;
DBManager dbManager = this.dbConnector.GetDbManager(ConUtil.CaseId);
if (dbManager == null)
{
logger.Error("数据库连接未建立!");
result = -;
}
else
{
dbManager.SqlBulkCopyInsert(this.ConnectionString, this.DbType, dt, tableName);
result = ;
}
return result;
} public static int SqlBulkCopyInsert(string connectionString, ProviderType providerType, DataTable dataTable, string tableName)
{
if (connectionString == null || connectionString.Length == )
{
throw new ArgumentNullException("connectionString is null or empty!");
}
int result = ;
using (DbConnection dbConnection = DbFactory.GetProvider(providerType).CreateConnection())
{
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connectionString);
sqlBulkCopy.DestinationTableName = tableName;
sqlBulkCopy.BatchSize = dataTable.Rows.Count;
dbConnection.ConnectionString = connectionString;
dbConnection.Open();
if (dataTable != null && dataTable.Rows.Count != )
{
sqlBulkCopy.WriteToServer(dataTable);
}
sqlBulkCopy.Close();
dbConnection.Close();
}
return result;
}
注意:以上代码不能直接拷贝执行,只是用法示例
MSSQL使用sqlbulkcopy批量插入数据的更多相关文章
- sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )
通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下. 其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...
- SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法
原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...
- C#中的SqlBulkCopy批量插入数据
在C#中,我们可以使用sqlBulkCopy去批量插入数据,其他批量插入方法不在讨论. 1 /// <summary> 2 /// SqlBulkCopy批量插入数据 3 /// < ...
- 用SqlBulkCopy批量插入数据到SqlServer数据库表中
首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using Syst ...
- 使用 SqlBulkCopy 批量插入数据
/// <summary> /// 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// </summary> /// <param name= ...
- sqlbulkcopy 批量插入数据
批量插入 Datetable数据 通过sqlbulkcopy 插入1百万条数据 用时 10秒钟 (有兴趣的小伙伴可以去测试) /// <summary> /// /// </sum ...
- c# sqlbulkcopy批量插入数据
dt信息中包含数据和表名 public static void SqlBulkInsert(DataTable dt, string connStr) { try { using (var conn ...
- 使用事务和SqlBulkCopy批量插入数据
SqlBulkCopy是.NET Framework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其他数据源的数据有效批量的加载到SQL Server表中的功能 ...
- C#使用SqlTransaction事务回滚与SqlBulkCopy批量插入数据
C#中批量处理数据,有时候因为一条记录导致整个批量处理失败.这时候肯能会导致数据不全等问题,这时候我们可以使用SqlTransaction来进行事务回滚,即是要么全部成功要么全部不成功.如下代码 // ...
随机推荐
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
- git diff提示filemode发生改变解决办法
git diff提示filemode发生改变(old mode 100644.new mode 10075) Posted on 2016-11-15 16:55 我是孙海龙 阅读(2292) 评论( ...
- JMS-activeMq发布订阅模式
上一篇对点对点模式进行总结,这一篇都发布订阅模式进行总结,代码都差不多,唯一区别就是创建队(session.createQueue(目的地))列改为创建主题(session.createTopic(目 ...
- c++ learning
迟到了三年的学习笔记.. 野指针:造了一个指针,不是NULL或者没有指向正经内存.比如刚造出来又不赋值,并不知道它指向了哪里 内存泄漏:造了一个指针,给他分配了空间,xxxxx,又分配了一块空间,指针 ...
- HashMap和ConcurrentHashMap和HashTable的底层原理与剖析
HashMap 可以允许key为null,value为null,但HashMap的是线程不安全的 HashMap 底层是数组 + 链表的数据结构 在jdk 1.7 中 map集合中的每一项都是一个 ...
- secureCRT7.3.4的破解与安装
1-9为 SecureCRT 7.3.4 安装图解:10-13是 SecureCRT 7.3.4 破解图解,心急的朋友可以直接向下拉. 以下是百度百科对 SecureCRT 的介绍: SecureCR ...
- POJ3275:Ranking the Cows(Bitset加速floyd求闭包传递)
Each of Farmer John's N cows (1 ≤ N ≤ 1,000) produces milk at a different positive rate, and FJ woul ...
- 三十四 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解
信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行一个函数 dispatcher.connect()信号分发器,第一个参数信号触发函数,第二 ...
- 【转】安装Ubuntu时卡在logo界面
Ubuntu15.04 安装卡在logo界面不动,进度点卡死不动,原因主要是双显卡,电源设置项默认不合理,导致安装失败. 选择USB硬盘(uefi),进入到一个有四个选项的界面,分别是 1,try U ...
- Ceph Monitor基础架构与模块详解
转自:https://www.ustack.com/blog/ceph-monitor/ Ceph rados cluster离不开Monitor,如果没有Monitor,则Ceph将无法执行一条简单 ...