C# Insert批量插入
2024-08-31 22:21:03
最近项目需要做一个批量导入的功能,每次导入最少的记录数都达到1万,之前写了一个通过循环Insert的方法,结果我自己都看不下了。太慢了,所以用了SqlBulkCopy,很快,100万条数据,1分钟都不到。
class Program
{
/// <summary>
/// 批量插入
/// </summary>
/// <param name="dt">数据集</param>
public static void BulkToDB(DataTable dt)
{
using (SqlConnection sqlConn = new SqlConnection("Data Source=.;uid=sa;pwd=123456;Initial Catalog=Test"))
{
SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn);
bulkCopy.DestinationTableName = "UserInfo"; //要插入数据的表名
bulkCopy.BatchSize = dt.Rows.Count; //插入的条数 try
{
sqlConn.Open();
if (dt != null && dt.Rows.Count != )
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
throw ex;
}
finally
{
sqlConn.Close();
if (bulkCopy != null)
bulkCopy.Close();
}
}
} /// <summary>
/// 创建表结构,(Id(自增),LoginName,LoginPwd)
/// </summary>
/// <returns></returns>
public static DataTable GetTableSchema()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]{
new DataColumn("Id",typeof(int)),
new DataColumn("LoginName",typeof(string)),
new DataColumn("LoginPwd",typeof(string))
}); return dt;
} static void Main(string[] args)
{
//100万条数据
Stopwatch sw = new Stopwatch();
for (int multiply = ; multiply < ; multiply++)
{
DataTable dt = GetTableSchema();
for (int count = multiply * ; count < (multiply + ) * ; count++)
{
DataRow r = dt.NewRow();
// r[0] = 1;//因为该列是自增列,所以可以不赋值
r[] = string.Format("Name-{0}", count * multiply);
r[] = string.Format("Pwd-{0}", count * multiply);
dt.Rows.Add(r);
}
sw.Start();
BulkToDB(dt);
sw.Stop();
Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
}
Console.ReadLine();
}
}
执行结果:
最新文章
- vue-validator(vue验证器)
- live555编译、移植
- Storyboards
- jquery 失去焦点时输入框为空时自动填写默认内容
- PHP操作cookie函数:setcookie()与setrawcookie()
- CentOS+nginx+uwsgi+Python 多站点环境搭建
- Myeclipse 中添加mysql的jdbc驱动
- 怎么关闭wps热点?永久关闭wps右下角弹窗的方法!
- 下一个ajax异步请求被挂起问题
- [NOIP2014]飞扬的小鸟 D1 T3 loj2500 洛谷P1941
- SQLServer查询计划
- .net core中的对象池
- 小米note开启调试模式
- JavaScript原型规则和实例
- day02 基本数据类型与运算符
- 在Ubuntu16.04上使用Autofs
- PyQt 5菜单和工具栏
- 监控memcache服务
- 用table表格来调整控件的格式
- WebAPI 请求跨域问题
热门文章
- 散列:散列函数与散列表(hash table)
- Oracle中的游标(转)
- 要求两个异步任务都完成后, 才能回到主线程:dispatch_group_t
- sparksql 动态设置schema将rdd转换成dataset/dataframe
- 亲测有效,解决Can &#39;t connect to local MySQL server through socket &#39;/tmp/mysql.sock &#39;(2) ";;
- Spring Boot 学习笔记一(SpringBoot启动过程)
- URLDecoder和URLEncoder的使用总结
- Android获取Context(任意位置任意地方,全局上下文)
- 《Head First 设计模式》学习笔记——命令模式
- CentOS 7 部署 ASP.NET Core 应用程序