【C#-批量插入数据到数据库】DataTable数据批量插入数据的库三种方法:SqlCommand.EcecuteNonQurery(),SqlDataAdapter.Update(DataTable) ,SqlBulkCopy.WriteToServer(Datatable)
第一种方法:使用SqlCommand.EcecuteNonQurery() 效率最慢
第二种方法:使用SqlDataAdapter.Update(DataTable) 效率次之
第三种方法:使用SqlBulkCopy.WriteToServer(Datatable) 效率最快
static void Main(string[] args)
{
string connString = "SERVER=.;DATABASE=Test;UID=sa;PWD=F123456789f"; //生成DataTable表
DataTable dt = new DataTable();
dt.Columns.Add("CompanyCode");
dt.Columns.Add("CompanyName");
dt.Columns.Add("Address");
dt.Columns.Add("Owner");
dt.Columns.Add("Memo");
for (int i = ; i < ; i++)
{
DataRow row = dt.NewRow();
row["CompanyName"] = "companyname" + string.Format("{0:00000}", i);
row["CompanyCode"] = "companycode" + string.Format("{0:00000}", i);
row["Address"] = "address" + string.Format("{0:00000}", i);
row["Owner"] = "owner" + string.Format("{0:00000}", i);
row["Memo"] = "memo" + string.Format("{0:00000}", i);
dt.Rows.Add(row);
} //第一种方法:使用SqlCommand.EcecuteNonQurery()方法插入
foreach (DataRow row in dt.Rows)
{
string sql = "insert into Mytable(CompanyName,CompanyCode,Address,Owner,Memo) values("
+ "'" + row["CompanyName"].ToString() + "'" + ","
+ "'" + row["CompanyCode"].ToString() + "'" + ","
+ "'" + row["Address"].ToString() + "'" + ","
+ "'" + row["Owner"].ToString() + "'" + ","
+ "'" + row["Memo"].ToString() + "'" + ")";
using (SqlConnection sqlcon = new SqlConnection(connString))
{
sqlcon.Open();
SqlCommand sqlcmd = new SqlCommand(sql, sqlcon);
sqlcmd.ExecuteNonQuery(); sqlcon.Close();
} } //第二种方法:使用SqlDataAdapter.Update(DataTable)
SqlCommand insertcmd = new SqlCommand("insert into Mytable(CompanyName,CompanyCode,Address,Owner,Memo) values(@CompanyName,@CompanyCode,@Address,@Owner,@Memo)", new SqlConnection(connString));
insertcmd.Parameters.Add("@CompanyName", SqlDbType.NChar, , "CompanyName");
insertcmd.Parameters.Add("@CompanyCode", SqlDbType.NChar, , "CompanyCode");
insertcmd.Parameters.Add("@Address", SqlDbType.NChar, , "Address");
insertcmd.Parameters.Add("@Owner", SqlDbType.NChar, , "Owner");
insertcmd.Parameters.Add("@Memo", SqlDbType.NChar, , "Memo");
SqlDataAdapter sqlda = new SqlDataAdapter();
sqlda.InsertCommand = insertcmd;
sqlda.Update(dt); //第三种方法:使用SqlBulkCopy.WriteToServer(Datatable)
SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connString, SqlBulkCopyOptions.UseInternalTransaction);
sqlbulkcopy.DestinationTableName = "Mytable"; //目标表,即数据要插入到哪个表去
sqlbulkcopy.ColumnMappings.Add("CompanyName","CompanyName"); //数据源列名与目标表的属性的映射关系 数据源是DataTable,目标表即数据库表
sqlbulkcopy.ColumnMappings.Add("CompanyCode", "CompanyCode");
sqlbulkcopy.ColumnMappings.Add("Address", "Address");
sqlbulkcopy.ColumnMappings.Add("Memo", "Memo");
sqlbulkcopy.ColumnMappings.Add("Owner", "Owner");
sqlbulkcopy.WriteToServer(dt); //数据源数据写入目标表 }
【C#-批量插入数据到数据库】DataTable数据批量插入数据的库三种方法:SqlCommand.EcecuteNonQurery(),SqlDataAdapter.Update(DataTable) ,SqlBulkCopy.WriteToServer(Datatable)的更多相关文章
- C# Entity Framework 更新数据的三种方法
例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...
- 【EF】EntityFramework 更新数据库字段的三种方法
实体类 public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public Tes ...
- EntityFramework 更新数据库字段的三种方法
例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...
- DataTable数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1) insert循环插入:2) sqldataadapter.update(dataset,tablename); ...
- DataTable 数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 1) insert循环插入: 2) sqldataadapter.update(dataset,tablename); 3) sqlbul ...
- 去除DataTable重复数据的三种方法
业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需要对其进行一些处理(过滤一些为空,长度太短或太长,非法字符,重复数据)然后在进行入库. 其中要避 ...
- 去除DataTable重复数据的三种方法(转)
转自:https://www.cnblogs.com/sunxi/p/4767577.html 业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需 ...
- Mybatis+Mysql插入数据库返回自增主键id值的三种方法
一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法: ...
- ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)
http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送 ...
随机推荐
- 查找担保圈-step5-比较各组之间的成员,对组的包含性进行查询,具体见程序的注释-版本2
USE [test] GO /****** Object: StoredProcedure [dbo].[p03_get_groupno_e2] Script Date: 2019/7/8 15:01 ...
- kettle 创建作业发送邮件
1.创建作业 . 2. 发送邮件配置,测试邮件 发件地址可以使用的QQ.126.163等邮箱 smtp server的填写smtp.qq.com或者smtp.126.com等等都可以这里我用Q163邮 ...
- PAT B1016.部分A+B(15)
B1016.部分A+B(15) #include <cstdio> #include <cstring> int calc(long long a, long long da) ...
- c++ erase 中的坑
先看一段正常的代码 #include <iostream> #include <string> using namespace std; int main() { " ...
- LeetCode 160——相交链表(JAVA)
编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB ...
- python 安装PostgreSQL 模块:psycopg2
官方资料:http://www.psycopg.org/psycopg/docs/ 安装: yum -y install python-psycopg2 (安装的版本可能是2.0) pip insta ...
- LeetCode面试常见100题( TOP 100 Liked Questions)
LeetCode面试常见100题( TOP 100 Liked Questions) 置顶 2018年07月16日 11:25:22 lanyu_01 阅读数 9704更多 分类专栏: 面试编程题真题 ...
- EasyUI_前台js_分页
1.html: <table id="DataTb" title="客户信息" class="easyui-datagrid" sty ...
- 在Global.asax中 注册Application_Error事件 捕获全局异常
参考于:https://shiyousan.com/post/635813858052755170 在ASP.NET MVC中,通过应用程序生命周期中的Application_Error事件可以捕获到 ...
- 爱上Java诊断利器之Arthas
1. Arthas是什么? 摘自Arthas的Github介绍: Arthas is a Java Diagnostic tool open sourced by Alibaba. Arthas al ...