1、首先我们做一下准备工作,在sql server和oracle分别建立一个Student表

oracle中

  --创建Student表 --
create table Student(
stuId number not null primary key,
stuName nvarchar2(20) not null,
stuAddress nvarchar2(50) null
)

sql server中

--创建Student表--
create table Student(
stuId int not null primary key,
stuName varchar(20) not null,
stuAddress varchar(50) null
)

2、创建一个模拟批量插入的demo

1)创建一个空的mvc项目

新建项目--> 模板-->Visual C# --> Web --> Asp.Net Web应用程序,创建一个StudyProject的空MVC项目

2)web.config 页面添加sqlserver 和oracle的数据库连接

在<configuration>节点下添加

 <connectionStrings>
<add name="SqlConn" providerName="SqlServer" connectionString="Data Source=.;Initial Catalog=TestDB;User ID=sa;Password=sa" />
<add name="OraConn" providerName="Oracle" connectionString="Data Source=ORCL;User Id=TMS21;Password=TMS21"/>
</connectionStrings>

3)添加HomeController、HomeService及相应index页面

控制器代码

using StudyProject.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace StudyProject.Controllers
{
public class HomeController : Controller
{
HomeService service = new HomeService(); // GET: Home
public ActionResult Index()
{
return View();
} /// <summary>
/// SQLBulkCopy的批量插入
/// </summary>
/// <returns></returns>
[HttpGet]
public string Get_MuliteAdd_SQL() {
//调用Sql的批量新增
string str = service.MuliteAdd_SQL();
return str;
} /// <summary>
/// OracleBulkCopy的批量插入
/// </summary>
/// <returns></returns>
[HttpGet]
public string Get_MuliteAdd_Oracle() {
//调用Sql的批量新增
string str = service.MuliteAdd_Oracle();
return str;
}
}
}

Service代码

using Oracle.DataAccess.Client;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web; namespace StudyProject.Models
{
public class HomeService
{
/// <summary>
/// SqlBulkCopy的批量插入10000条数据
/// </summary>
/// <returns></returns>
public string MuliteAdd_SQL() { //获取当前时间
DateTime startTime = DateTime.Now;
//获取sqlserver数据库连接字符串
string connStr = ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString; //创建DataTable表和列
DataTable dt = new DataTable();
dt.Columns.Add("stuId");
dt.Columns.Add("stuName");
dt.Columns.Add("stuAddress"); //循环添加10000条数据
for (int i = ; i < ; i++) {
//为datarow的行的列赋值
DataRow row = dt.NewRow();
row["stuId"] = (i+);
row["stuName"] = "学生"+ (i+);
row["stuAddress"] = "不详"+(i+);
//添加到datatable中
dt.Rows.Add(row);
} //使用sqlserver连接(默认引用了 System.Data.SQLClient)
using (SqlConnection conn = new SqlConnection(connStr))
{
//打开连接
conn.Open();
//使用SqlBulkCopy
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
{
try
{
//插入到数据库的目标表 TbA:表名
bulkCopy.DestinationTableName = "Student";
//内存表的字段 对应数据库表的字段
bulkCopy.ColumnMappings.Add("stuId", "stuId");
bulkCopy.ColumnMappings.Add("stuName", "stuName");
bulkCopy.ColumnMappings.Add("stuAddress", "stuAddress"); bulkCopy.WriteToServer(dt);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
//关闭连接
conn.Close();
} //获取插入毫秒数
TimeSpan ts = DateTime.Now.Subtract(startTime);
//返回执行成功数量和时间数
string msg = "一共插入" + dt.Rows.Count + "条数据,用时:" + ts.ToString(); return msg;
} /// <summary>
/// OracleBulkCopy的批量插入10000条数据
/// </summary>
/// <returns></returns>
public string MuliteAdd_Oracle() {
//获取当前时间
DateTime startTime = DateTime.Now;
//获取oracle数据库连接字符串
string connStr = ConfigurationManager.ConnectionStrings["OraConn"].ConnectionString; //创建DataTable表和列
DataTable dt = new DataTable();
dt.Columns.Add("STUID");
dt.Columns.Add("STUNAME");
dt.Columns.Add("STUADDRESS"); //循环添加10000条数据
for (int i = ; i < ; i++)
{
//为datarow的行的列赋值
DataRow row = dt.NewRow();
row["STUID"] = (i + );
row["STUNAME"] = "学生" + (i + );
row["STUADDRESS"] = "不详" + (i + );
//添加到datatable中
dt.Rows.Add(row);
} //使用oracle连接(引用orale的Oracle.DataAccess.Client)
using (OracleConnection conn = new OracleConnection(connStr))
{
//打开连接
conn.Open();
//使用OracleBulkCopy
using (OracleBulkCopy bulkCopy = new OracleBulkCopy(conn))
{
try
{
//插入到数据库的目标表 TbA:表名
bulkCopy.DestinationTableName = "STUDENT";
//内存表的字段 对应数据库表的字段
bulkCopy.ColumnMappings.Add("STUID", "STUID");
bulkCopy.ColumnMappings.Add("STUNAME", "STUNAME");
bulkCopy.ColumnMappings.Add("STUADDRESS", "STUADDRESS"); bulkCopy.WriteToServer(dt);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
//关闭连接
conn.Close();
} //获取插入毫秒数
TimeSpan ts = DateTime.Now.Subtract(startTime);
//返回执行成功数量和时间数
string msg = "一共插入" + dt.Rows.Count + "条数据,用时:" + ts.ToString(); return msg;
}
}
}

index页面代码

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Sql和Oracle的BulkCopy 使用</title> </head>
<script type="text/javascript" src="~/scripts/jquery-1.10.2.min.js"></script>
<script>
var SQLBulkCopy = function () {
//通过GET方式请求
$.ajax({
type: "GET",
url: 'Home/Get_MuliteAdd_SQL',
success: function (str) {
console.log(str);
//返回信息显示
$('#SqlMessage').html(str);
}
});
} var OracleBulkCopy = function () {
//通过GET方式请求
$.ajax({
type: "GET",
url: 'Home/Get_MuliteAdd_Oracle',
success: function (str) {
console.log(str);
//返回信息显示
$('#OracleMessage').html(str);
}
});
}
</script>
<style type="text/css"> .textarea {
width: 300px;
height: 100px;
margin-top: 10px;
font-size:18px;
}
</style>
<body>
<h2>Sql和Oracle的BulkCopy 使用</h2>
<div id="sqlbulkCopy">
<label>SQLBulkCopy的批量插入:</label>
<input type="button" value="SQLBulkCopy批量插入" onclick="SQLBulkCopy()" /><br/>
<textarea id="SqlMessage" class="textarea"></textarea>
</div>
<br />
<div id="oraclebulkCopy">
<label>OracleBulkCopy的批量插入:</label>
<input type="button" value="OracleBulkCopy批量插入" onclick="OracleBulkCopy()" /><br />
<textarea id="OracleMessage" class="textarea"></textarea>
</div>
</body>
</html>

3、界面演示及效果

1)index页面效果

2)sql数据表效果

3)oracle数据表效果

4、demo源码下载地址:

https://pan.baidu.com/s/1lXEzHltvaGS2UKDX62ETeQ

注意:使用OracleBulkCopy需要引用Oracle.DataAccess.Client,否则找不到OracleConnect这些,而SqlBulkCopy已经默认System.Data.Client引用了。

C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入的更多相关文章

  1. sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )

    通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下.   其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...

  2. C#中的SqlBulkCopy批量插入数据

    在C#中,我们可以使用sqlBulkCopy去批量插入数据,其他批量插入方法不在讨论. 1 /// <summary> 2 /// SqlBulkCopy批量插入数据 3 /// < ...

  3. 【ITOO 1】SQLBulkCopy实现不同数据库服务器之间的批量导入

    导读:在做项目的时候,当实现了动态建库后,需要实现从本地服务器上获取数据,批量导入到新建库的服务器中的一个表中去.之前是用了一个SQL脚本文件实现,但那时候没能实现不同的数据库服务器,现在用了SqlB ...

  4. mysql根据查询结果批量更新多条数据(插入或更新)

    mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...

  5. SQLServer如何在批量插入后,获取批量插入的自增列的值

    解决方法如下: Use the OUTPUT functionality to grab all the INSERTED Id back into a table. 使用output 功能获取所有插 ...

  6. 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表

    最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...

  7. [SQL]开启事物,当两条插入语句有出现错误的时候,没有错误的就插入到表中,错误的语句不影响到正确的插入语句

    begin transaction mustt insert into student values(,'kkk','j大洒扫','j','djhdjh') insert into student v ...

  8. mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

    [CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...

  9. 在mysql数据库中创建oracle scott用户的四个表及插入初始化数据

    在mysql数据库中创建oracle scott用户的四个表及插入初始化数据 /* 功能:创建 scott 数据库中的 dept 表 */ create table dept( deptno int ...

随机推荐

  1. python中关于列表和元祖的基础知识

    一,列表 1)定义: []内以逗号分隔,按照索引,存放各种数据类型,每一个位置代表一个元素 2)特性: 1 可存放多个值 2 按照从左到右的顺序定义列表元素,下标为零开始顺序访问,有序 3可修改指定索 ...

  2. SpringBoot之profile的使用

    Profile配置是针对不同的环境提供不同的配置支持,比如,在开发环境的配置和测试环境下的配置不同,那么就可以使用Profile配置来实现该要求. 在你的src/main/resources下建立相应 ...

  3. 力扣(LeetCode) 997. 找到小镇的法官

    在一个小镇里,按从 1 到 N 标记了 N 个人.传言称,这些人中有一个是小镇上的秘密法官. 如果小镇的法官真的存在,那么: 小镇的法官不相信任何人. 每个人(除了小镇法官外)都信任小镇的法官. 只有 ...

  4. List、Map、Set的区别与联系

    重复和有序 List 存储的元素是有顺序的,并且值允许重复: Map 元素按键值对存储,无放入顺序 ,它的键是不允许重复的,但是值是允许重复的: Set 存储的元素是无顺序的,并且不允许重复,元素虽然 ...

  5. 人脸识别ArcfaceDemo for Windows 分享

    Demo_for_Windows https://github.com/ArcJonSnow/Demo_for_Windows Arcsoft ArcfaceDemo for Windows, VS2 ...

  6. Windows上安装运行hadoop

    0.自己编译安装步骤在这里,有英文版本连接:<英文传送门>. 自己编译尝试后不成功,换为下面使用别人编译好的版本的方法.参考博客:<初学hadoop,windows下安装> 1 ...

  7. (转)C# 的三种序列化方法

    序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象 为了序列化一个对象, ...

  8. (转)winform之RichTextBox

    RichTextBox是一种可用于显示.输入和操作格式文本,除了可以实现TextBox的所有功能,还能提供富文本的显示功能. 控件除具有TextBox 控件的所有功能外,还能设定文字颜色.字体和段落格 ...

  9. idea maven环境下 java实现发送邮件验证

    1.开通smtp授权 QQ邮箱-设置-账户-开启 得到一个授权码 2.下载javax.email包 maven项目中 pom文件加入: <dependency> <groupId&g ...

  10. 单细胞数据高级分析之构建成熟路径 | Identifying a maturation trajectory

    其实就是另一种形式的打分. 个人点评这种方法: 这篇文章发表在nature上,有点奇怪,个人感觉创新性和重要性还不够格,工具很多,但是本文基本都是自己开发的算法(毕竟satji就是搞统计出身的). 但 ...