.Net插入大批量数据
1、 使用SqlDataAdapter
/// <summary>
/// 实现数据库事务,大批量新增数据
/// </summary>
/// <param name="dt">数据源</param>
public static int ExecuteSqlTran(DataTable dt)
{
int affectRows = 0;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand())
{
SqlTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
string insertcmd = @"
DECLARE @Count INT;
SELECT @Count = COUNT(*) FROM {0} WHERE {3};
IF(@Count = 0)
INSERT INTO {0} ({1}) VALUES ({2})";
StringBuilder columns = new StringBuilder();
StringBuilder filters = new StringBuilder();
StringBuilder paramvalues = new StringBuilder();
foreach (DataColumn dc in dt.Columns)
{
columns.Append(dc.ColumnName + ",");
paramvalues.Append("@" + dc.ColumnName + ",");
filters.AppendFormat(" {0} = @{0} AND ", dc.ColumnName);
SqlParameter par = new SqlParameter();
par.ParameterName = "@" + dc.ColumnName;
par.SourceColumn = dc.ColumnName;
command.Parameters.Add(par);
}
string column = columns.ToString().Substring(0, columns.ToString().LastIndexOf(','));
string paramvalue = paramvalues.ToString().Substring(0, paramvalues.ToString().LastIndexOf(','));
string filter = filters.ToString().Substring(0, filters.ToString().LastIndexOf("AND"));
command.CommandText = string.Format(insertcmd, dt.TableName, column, paramvalue, filter);
command.Connection = connection;
command.Transaction = transaction;
sqlDataAdapter.InsertCommand = command;
affectRows = sqlDataAdapter.Update(dt);
transaction.Commit();
connection.Close();
}
catch (Exception ex)
{
transaction.Rollback();
throw;
}
finally
{
command.Dispose();
connection.Close();
}
}
}
return affectRows;
}
最新文章
- 无法进入adb shell,提示unknown host service的解决办法
- 大话immutable.js
- Java实现颜色渐变效果
- C#中定义数组
- LoRaWAN协议(一)--架构解析
- lucene字典实现原理——FST
- jquery的change 事件
- 1156. Two Rounds(dfs+背包)
- Helpers\Document
- C语言读写伯克利DB 4
- Jquery列表中的导航菜单的应用
- KestrelServer
- Java Core和HeapDump
- CentOS6.8安装mysql5.6
- 22、手把手教你Extjs5(二十二)模块Form的自定义的设计[1]
- python网络编程之单线程之间的并发
- 适合在Markdown里面使用的emoji
- Request method &#39;POST&#39; not supported解决办法
- JS 全选、全不选、反选
- java面向对象总结(二)
热门文章
- 十九、python沉淀之路--装饰器
- centos 7 bbr 安装
- 几个ADB常用命令
- FastAdmin 学习线路 (2018-09-09 增加 Layer 组件)
- 洛谷【P1064】金明的预算方案
- android通过查询电话号码获取联系人信息
- linux基础(3)
- 利用全局变量$_SESSION和register_shutdown_function自定义会话处理
- How to get the MD5 checksum for a file: md5sum, digest, csum, fciv
- (转)Oracle游标使用全解