.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;
}
.Net插入大批量数据的更多相关文章
- MySQL插入大批量数据时报错“The total number of locks exceeds the lock table size”的解决办法
事情的原因是:我执行了一个load into语句的SQL将一个很大的文件导入到我的MySQL数据库中,执行了一段时间后报错"The total number of locks exceeds ...
- ES的副本数量、插入大批量数据前,副本数应该设置为0
多副本可以提升检索的能力,但是如果副本数量太多,插入数据的时候容易出现卡顿现象: 因为主分片要把数据同步给所有的副本,所以建议副本数量最好是1-2个: ---- Es在索引数据的时候,如果存在副本,那 ...
- SQL 数据库连续插入大批量数据时超时
经常会处理大批量千万级的数据,一直以来都没问题.最近在处理时确出来了经常超时,程序跑一段时间就得停下来重启服务器,根据几次的调整发现了问题的所在,产生这类问题主要是以下几点所导致: 1.数据 ...
- identity_insert---实验性插入大批量数据和分页存储过程
OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 1create database data_Test --创建数据库data_Test 2use da ...
- JDBC 插入大批量数据
时不时会有大量数据的插入操作,方式有多种,效率不同: 1. statement 2. prepareStatement 3. statement/prepareStatement + batch 4. ...
- Sql Server数据库使用触发器和sqlbulkcopy大批量数据插入更新
需要了解的知识 1.触发器 2.sqlbulkcopy 我的用途 开发数据库同步的工具,需要大批量数据插入和数据更新. 方式 使用SqlBulkCopy类对数据进行数据批量复制,将需要同步数据的表新建 ...
- mysql总结:索引,存储引擎,大批量数据插入,事务,锁
mysql总结 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 存储引擎: 常见存储引擎: Myisam:5.5之前默认引擎,支持 ...
- ODP方式,大批量数据写入ORACLE数据库
项目中在同步数据的时候,需要把获得的数据DataTable,写入oracle数据库 因为System.Data.OracleClient写入方式写入大批量数据特别慢,改用Oracle.DataAcce ...
- Java实现大批量数据导入导出(100W以上) -(一)导入
最近业务方有一个需求,需要一次导入超过100万数据到系统数据库.可能大家首先会想,这么大的数据,干嘛通过程序去实现导入,为什么不直接通过SQL导入到数据库. 大数据量报表导出请参考:Java实现大批量 ...
随机推荐
- 一线互联网公司必备——最为详细的Docker入门吐血总结
在计算机技术日新月异的今天, Docker 在国内发展的如火如荼. 特别是在一线互联网公司 Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项,不信的话看看下面这张图. ...
- 在web.config中配置httpHandlers节点是的说明
<system.web> <httpHandlers> <add verb="*" path="*.lcj" type=" ...
- Hibernate 查询语句用法记录
Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...
- java中十进制转换为任意进制
次笔试时候遇到的关于十进制转换成十三进制的编程题. 先说说简单的思路吧: 1.十进制数 num 转换为 n进制 num%n结果肯定为n进制数的最后一位 结果存入一个数组中 2.进入一个循环num!=0 ...
- TXT
ANDRIOD: 192.168.199.119 data50803360 zc_3floor kk4836kk kahuna kk1626kk
- Erlang基础 -- 介绍 -- Erlang特点
前言 Erlang是具有多重范型的编程语言,具有很多特点,主要的特点有以下几个: 函数式 并发性 分布式 健壮性 软实时 热更新 递增式代码加载 动态类型 解释型 函数式 Erlang是函数式编程语言 ...
- PTA 词频统计(30 分)
词频统计(30 分) 请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词. 所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留 ...
- NoSuchBeanDefinitionException: No bean named 'shiroFilter' is defined
以前运行正常的项目,过了一段时间再运行时出问题,打开链接无反应,无法访问Tomcat,空白页面. 经检查发现,在Tomcat log中有报错: NoSuchBeanDefinitionExceptio ...
- Python多线程-守护线程
守护线程:守护着非守护线程,守护线程和非守护线程同时运行,当非守护线程运行结束后,无论守护线程有没有运行完,脚本都会停止运行 首先看一段普通的多线程实例 # -*- coding:utf-8 -*- ...
- PHP函数(一)-变量
1.全局变量 <?php $a = 1; $b = 2; function test(){ echo $a + $b."<br>"; //运行结果为0 } tes ...