c# 批量处理数据录入
c# 分批处理数据录入
//using System.Text;
//using System.Data;
//using System.Data.SqlClient;
//using System;
//namespace InsertEfficiency
//{
// class Program
// {
// static void Main(string[] args)
// {
// //构造数据源
// DataTable dt = new DataTable();
// dt.Columns.Add(new DataColumn("ID", typeof(int)));
// dt.Columns.Add(new DataColumn("CreateDateTime", typeof(DateTime)));
// dt.Columns.Add(new DataColumn("TestMethod", typeof(string)));
// for (int i = 1; i <= 30; i++)
// {
// dt.Rows.Add(new object[] { i, DateTime.Now, "ExecuteSqlBulkCopy" });
// }
// Test t = new Test();
// DateTime begin1 = DateTime.Now;
// t.ExecuteRowByRow(dt);
// DateTime end1 = DateTime.Now;
// Console.WriteLine("ExecuteRowByRow:{0}ms", (end1 - begin1).Milliseconds);
// DateTime begin2 = DateTime.Now;
// t.ExecuteOnce(dt);
// DateTime end2 = DateTime.Now;
// Console.WriteLine("ExecuteOnce:{0}ms", (end2 - begin2).Milliseconds);
// DateTime begin3 = DateTime.Now;
// t.ExecuteSqlBulkCopy(dt);
// DateTime end3 = DateTime.Now;
// Console.WriteLine("ExecuteSqlBulkCopy:{0}ms", (end3 - begin3).Milliseconds);
// Console.ReadLine();
// }
// }
// class Test
// {
// public Test()
// {
// }
// public void ExecuteRowByRow(DataTable dt)
// {
// using (SqlConnection conn = new SqlConnection(GetConnectionString))
// {
// conn.Open();
// for (int rowIndex = 0; rowIndex < dt.Rows.Count; rowIndex++)
// {
// DataRow dr = dt.Rows[rowIndex];
// SqlCommand cmd = new SqlCommand();
// cmd.Connection = conn;
// cmd.CommandText = string.Format("insert into TestTable values ({0},'{1}','{2}')",
// dr[0].ToString(), dr[1].ToString(), "ExecuteRowByRow");
// cmd.ExecuteNonQuery();
// }
// }
// }
// public void ExecuteOnce(DataTable dt)
// {
// StringBuilder strSql = new StringBuilder();
// for (int rowIndex = 0; rowIndex < dt.Rows.Count; rowIndex++)
// {
// DataRow dr = dt.Rows[rowIndex];
// string sql = string.Format("insert into TestTable values ({0},'{1}','{2}')",
// dr[0].ToString(), dr[1].ToString(), "ExecuteOnce");
// if (strSql.ToString().Length == 0)
// {
// strSql.Append(sql);
// }
// else
// {
// strSql.Append(";").Append(sql);
// }
// }
// using (SqlConnection conn = new SqlConnection(GetConnectionString))
// {
// conn.Open();
// SqlCommand cmd = new SqlCommand();
// cmd.Connection = conn;
// cmd.CommandText = strSql.ToString();
// cmd.ExecuteNonQuery();
// }
// }
// public void ExecuteSqlBulkCopy(DataTable dt)
// {
// using (SqlConnection conn = new SqlConnection(GetConnectionString))
// {
// SqlBulkCopy bulk = new SqlBulkCopy(conn);
// bulk.DestinationTableName = "TestTable";
// bulk.BatchSize = dt.Rows.Count;
// if (dt != null && dt.Rows.Count != 0)
// {
// conn.Open();
// bulk.WriteToServer(dt);
// }
// bulk.Close();
// }
// }
// string GetConnectionString
// {
// get
// {
// //return @"server=.\mssqlserver2005;database=test;uid=sa;pwd=123456";
// return @"server=SA-PC\SQLEXPRESS;database=test;uid=sa;pwd=123";
// }
// }
// }
//}
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Threading;
using System;
namespace InsertEfficiency
{
class Program
{
static void Main(string[] args)
{
Test t = new Test();
t.Testing();
Console.ReadLine();
}
}
class Test
{
DataTable dt = new DataTable();
public Test()
{
CreateData();
}
private void CreateData()
{
//构造数据源
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("CreateDateTime", typeof(DateTime)));
dt.Columns.Add(new DataColumn("TestMethod", typeof(string)));
for (int i = ; i <= ; i++)
{
dt.Rows.Add(new object[] { i, DateTime.Now, "ExecuteSqlBulkCopy" });
}
}
public void Testing()
{
for (int i = ; i < ; i++)
{
Thread t = new Thread(new ParameterizedThreadStart(ExcuteTesting));
t.Start(i);
}
}
private void ExcuteTesting(object TreadNo)
{
//DateTime begin1 = DateTime.Now;
//ExecuteRowByRow();
//DateTime end1 = DateTime.Now;
//Console.WriteLine("Tread-{0}-ExecuteRowByRow:{1}ms", TreadNo, (end1 - begin1).Milliseconds);
DateTime begin2 = DateTime.Now;
ExecuteOnce();
DateTime end2 = DateTime.Now;
Console.WriteLine("Tread-{0}-ExecuteOnce:{1}ms", TreadNo, (end2 - begin2).Milliseconds);
//DateTime begin3 = DateTime.Now;
//ExecuteSqlBulkCopy();
//DateTime end3 = DateTime.Now;
//Console.WriteLine("Tread-{0}-ExecuteSqlBulkCopy:{1}ms", TreadNo, (end3 - begin3).Milliseconds);
//Console.WriteLine("Tread-{0} execute successfully\r\n", TreadNo);
}
private void ExecuteRowByRow()
{
using (SqlConnection conn = new SqlConnection(GetConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
DataRow dr;
conn.Open();
SqlTransaction tran = conn.BeginTransaction();
try
{
for (int rowIndex = ; rowIndex < dt.Rows.Count; rowIndex++)
{
dr = dt.Rows[rowIndex];
cmd.CommandText = string.Format("insert into TestTable values ({0},'{1}','{2}')",
dr[].ToString(), dr[].ToString(), "ExecuteRowByRow");
cmd.ExecuteNonQuery();
}
tran.Commit();
}
catch
{
tran.Rollback();
}
}
}
private void ExecuteOnce()
{
StringBuilder strSql = new StringBuilder();
for (int rowIndex = ; rowIndex < dt.Rows.Count; rowIndex++)
{
DataRow dr = dt.Rows[rowIndex];
string sql = string.Format("insert into TestTable values ({0},'{1}','{2}')",
dr[].ToString(), dr[].ToString(), "ExecuteOnce");
if (strSql.ToString().Length == )
{
strSql.Append(sql);
}
else
{
strSql.Append(";").Append(sql);
}
}
using (SqlConnection conn = new SqlConnection(GetConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = strSql.ToString();
conn.Open();
cmd.ExecuteNonQuery();
}
}
public void ExecuteSqlBulkCopy()
{
using (SqlConnection conn = new SqlConnection(GetConnectionString))
{
SqlBulkCopy bulk = new SqlBulkCopy(conn);
bulk.DestinationTableName = "TestTable";
bulk.BatchSize = dt.Rows.Count;
if (dt != null && dt.Rows.Count != )
{
conn.Open();
bulk.WriteToServer(dt);
}
bulk.Close();
}
}
private string GetConnectionString
{
get
{
return @"server=SA-PC\SQLEXPRESS;database=test;uid=sa;pwd=123";
}
}
}
}
c# 批量处理数据录入的更多相关文章
- 基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍
在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章会随着技术的探讨一直写下去,不过这个系列的文章,到这里做一个总结,展示一下整体基于MVC4+Ea ...
- 也用 Log4Net 之将日志记录到数据库的后台实现 (二)
也用 Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之 ...
- 基于MVC4+EasyUI的Web开发框架形成之旅(5)--框架总体界面介绍
在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章会随着技术的探讨一直写下去,不过这个系列的文章,到这里做一个总结,展示一下整体基于MVC4+Ea ...
- (转)基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍
http://www.cnblogs.com/wuhuacong/p/3344096.html 在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章 ...
- Log4Net 之将日志记录到数据库的后台实现 (二)
原文:Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之前 ...
- 从excel表中生成批量SQL,将数据录入到数据库中
excel表格中有许多数据,需要将数据导入数据库中,又不能一个一个手工录入,可以生成SQL,来批量操作. 1.首先在第二行的H列,插入函数:=CONCATENATE("INSERT ...
- 使用事务操作SQLite数据批量插入,提高数据批量写入速度,源码讲解
SQLite数据库作为一般单机版软件的数据库,是非常优秀的,我目前单机版的软件产品线基本上全部替换Access作为优选的数据库了,在开发过程中,有时候需要批量写入数据的情况,发现传统的插入数据模式非常 ...
- BDC、CATT批量数据维护
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- MES系统在小批量电子行业生产管理中的应用
小批量电子产品生产管理的主要问题 电子电器制造类企业,既有单件小批量生产,也有批量生产:有按库存生产,也有按订单生产,属于典型的离散制造行业.因产品的不同其生产工艺流程也不尽相同,生产设备的布置不是按 ...
随机推荐
- iOS:动画(18-10-15更)
目录 1.UIView Animation 1-1.UIView Animation(基本使用) 1-2.UIView Animation(转场动画) 2.CATransaction(Layer版的U ...
- ARC下IBOutlet用weak还是strong
原文来自这里. 今天用Xcode5的时候,发现默认的IBoutlet的属性设置为weak——因为Xcode5建立的工程都是ARC的了.但是当时还有点不明白,因为项目的原因,一直没有正式使用过ARC.于 ...
- 基于jquery,ajax请求及自我终止的函数封装。
场景描述: 在我们平时的开发过程中,经常会遇到这样的情况.在搜索功能中进行模糊搜索或者联想关联. 这就要我们每次对输入框中的数据进行改动时,都要发送一次请求.当在短时间内多次操作改动时,问题就出现了. ...
- MongoDB如何释放空闲空间?
当我们从MongoDB中删除文档或集合时,MongoDB并不会将已经占用了的磁盘空间释放,它会一直维护已经占用了磁盘空间的数据文件,尽管数据文件中可能存在大大小小的空记录列表(empty record ...
- 关于485通信不稳定问题解决方案[STM32产品问题]
485通讯不稳定的问题(具体表现为有时能通讯上,有时通讯不上) RS485在连接设备过多.通讯距离过长.双绞线质量差,接线不规范等,都会导致通讯不稳定的问题. 解决方案: 一.关于485总线的几个概念 ...
- rails应用使用carrierwave和mini_magick上传用户头像
1. 在Gemfile添加 gem 'carrierwave' gem 'mini_magick' 执行 bundle install 2. 生成uploader rails generate upl ...
- Python 爬虫 (五)
# 头条街拍图片爬取 1 import re import requests from urllib import request import json import os i = 0 header ...
- C语言#ifdef等宏的妙用
这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件 ...
- pyhton 下 使用getch(), 输入字符无需回车
原代码来自 https://code.activestate.com/recipes/134892-getch-like-unbuffered-character-reading-from-stdin ...
- Understanding Delegated JavaScript Events
While I ended up using a CSS-only implementation for this pen, I started by writing it mostly using ...