insert语句,sqldataadapter.update(dataset,tablename);sqlbulkcopy.WriteToServer(datatable);三个方法的性能进行比较:

生成测试的datatable表,表结构如下:

UniqueID(主键,自动增长)  |  CompanyName  |  CompanyCode  |  Address  |  Owner  |  Memo 共6个字段。

 SqlConnection sqlconnection = new SqlConnection(connectionString);
SqlDataAdapter sqldataadapter = new SqlDataAdapter("select * from dTable where 1=2", sqlconnection);
DataSet dataset = new DataSet();
sqldataadapter.Fill(dataset, "dTable");
DataTable datatable = dataset.Tables[];
//生成20000条记录
for (int i = ; i < ; i++)
{
  DataRow datarow = datatable.NewRow();
  datarow["CompanyName"] = "companyname"+string.Format("{0:0000}",i);
  datarow["CompanyCode"] = "companycode" + string.Format("{0:0000}", i);
  datarow["Address"] = "address" + string.Format("{0:0000}", i);
  datarow["Owner"] = "owner" + string.Format("{0:0000}", i);
  datarow["Memo"] = "memo" + string.Format("{0:0000}", i);
  datatable.Rows.Add(datarow);
}

1.使用sqlcommand.executenonquery()方法插入

foreach (DataRow datarow in datatable.Rows)
{
  string sql = "INSERT INTO [dTable]([CompanyName],[CompanyCode],[Address],[Owner],[Memo])" +
  "VALUES('" + datarow["CompanyName"].ToString() + "'" +
  ",'" + datarow["CompanyCode"].ToString() + "'" +
  ",'" + datarow["Address"].ToString() + "'" +
  ",'" + datarow["Owner"].ToString() + "'" +
  ",'" + datarow["Memo"].ToString() + "')";
using (SqlConnection sqlconn = new SqlConnection(connectionString))
{
sqlconn.Open();
SqlCommand sqlcommand = new SqlCommand(sql, sqlconn);
sqlcommand.ExecuteNonQuery();
sqlconn.Close();
}
}

-插入20000条记录时间:00:00:29.7336000-

2.使用sqldataadapter.update(dataset,tablename);

SqlCommand insertcommand = new SqlCommand("INSERT INTO [dTable]([CompanyName],[CompanyCode],[Address],[Owner],[Memo])" +
"VALUES(@CompanyName, @CompanyCode,@Address,@Owner,@Memo)",new SqlConnection(connectionString));
insertcommand.Parameters.Add("@CompanyName", SqlDbType.NChar, , "CompanyName");
insertcommand.Parameters.Add("@CompanyCode", SqlDbType.NChar, , "CompanyCode");
insertcommand.Parameters.Add("@Address", SqlDbType.NChar, , "Address");
insertcommand.Parameters.Add("@Owner", SqlDbType.NChar, , "Owner");
insertcommand.Parameters.Add("@Memo", SqlDbType.NChar, , "Memo");
sqldataadapter.InsertCommand = insertcommand;
sqldataadapter.Update(dataset, "dTable");

-插入20000条记录时间:00:00:22.8938000-

3.使用sqlbulkcopy.writetoserver(datatable)

SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction);
sqlbulkcopy.DestinationTableName = "dTable";//数据库中的表名
sqlbulkcopy.WriteToServer(dataset.Tables[]);

-插入20000条记录时间:00:00:00.3276000-

所以说速度是sqlbulkcopy最快,sqldataadapter.update()次之,sqlcommand.ExecuteNonQuery()最慢。

Oracle DataTable的数据批量写入数据库的更多相关文章

  1. DataTable的数据批量写入数据库

    最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.upda ...

  2. 批量插入数据, 将DataTable里的数据批量写入数据库的方法

    大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server:   使用SqlBulkCopy 2. MySql ...

  3. DataTable数据批量写入数据库三种方法比较

    DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1)   insert循环插入:2)   sqldataadapter.update(dataset,tablename); ...

  4. DataTable 数据批量写入数据库三种方法比较

    DataTable数据批量写入数据库三种方法比较 1)   insert循环插入: 2)   sqldataadapter.update(dataset,tablename); 3)   sqlbul ...

  5. SqlBulkCopy将DataTable中的数据批量插入数据库中

    #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...

  6. list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库

    /// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...

  7. c#WebApi使用form表单提交excel,实现批量写入数据库

    思路:用户点击下载模板按钮,获取到excel模板,然后向里面填写数据保存.from表单提交的时候选择保存好的excel,实现数据的批量导入过程 先把模板放在服务器的项目目录下面:如 模板我一般放在:F ...

  8. Java实现Excel数据批量导入数据库

    Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...

  9. 将Excle中的数据批量导入数据库

    namespace 将Excle中的数据批量导入数据库{    class Program    {        static void Main(string[] args)        { S ...

随机推荐

  1. java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ClassLoadingException

    下载高版本的: hibernate-commons-annotations-5.0.1.Final.jar 低版本缺包

  2. 卸载Visual Studio最佳方法难道真的是重装系统?

    卸载Visual Studio最佳方法难道真的是重装系统? 卸载Visual Studio最佳方法难道真的是重装系统? 使用TotalUninstaller貌似也没有效果,默认卸载的,程序列表里面还是 ...

  3. Codeforces Round#509 Div.2翻车记

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  4. NEERC 15 (10/12)

    NEERC=Not Easy European Regional Contest 据说NEERC天天被搬,赶紧做了好了.在Claris和Google的帮助下做了10题,感谢cls. http://co ...

  5. BZOJ4870 [Shoi2017]组合数问题 【组合数 + 矩乘】

    题目链接 BZOJ4870 题解 \[ans = \sum\limits_{i = 0}^{\infty}{nk \choose ik + r} \pmod p\] 发现实际是求 \[ans = \s ...

  6. 使用SUID二进制文件进行Linux权限升级技巧

      0x00 基础知识 众所周知,在Linux中一切都以文件存在,包括具有允许或限制三个执行操作(即读/写/执行)权限的目录和设备.因此,当给任何文件设置权限时,应该需要了解允许的Linux用户或限制 ...

  7. 百度地图JS API不能使用position:fixed

    用于放置百度地图的dom元素及其任何一级父元素设置position:fixed属性时,js会报如下错误: Uncaught TypeError: Cannot read property 'offse ...

  8. python之旅:并发编程之多线程

    一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 官网链接:https://docs.python ...

  9. SpringMVC 上传文件(文件非必填)MultipartHttpServletRequest

    原文:https://blog.csdn.net/dorothy1224/article/details/79136676 上传文件(文件非必填)MultipartHttpServletRequest ...

  10. for循环 底层工作原理

    for 循环是对容器进行迭代的过程. 什么是迭代? 迭代就是从某个容器对象中逐个地读取元素,直到容器中没有更多元素为止. for 循环的步骤是什么? 先判断对象是否为可迭代对象,不是的话直接报错,抛出 ...