C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入
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的批量插入的更多相关文章
- sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )
通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下. 其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...
- C#中的SqlBulkCopy批量插入数据
在C#中,我们可以使用sqlBulkCopy去批量插入数据,其他批量插入方法不在讨论. 1 /// <summary> 2 /// SqlBulkCopy批量插入数据 3 /// < ...
- 【ITOO 1】SQLBulkCopy实现不同数据库服务器之间的批量导入
导读:在做项目的时候,当实现了动态建库后,需要实现从本地服务器上获取数据,批量导入到新建库的服务器中的一个表中去.之前是用了一个SQL脚本文件实现,但那时候没能实现不同的数据库服务器,现在用了SqlB ...
- mysql根据查询结果批量更新多条数据(插入或更新)
mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...
- SQLServer如何在批量插入后,获取批量插入的自增列的值
解决方法如下: Use the OUTPUT functionality to grab all the INSERTED Id back into a table. 使用output 功能获取所有插 ...
- 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表
最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...
- [SQL]开启事物,当两条插入语句有出现错误的时候,没有错误的就插入到表中,错误的语句不影响到正确的插入语句
begin transaction mustt insert into student values(,'kkk','j大洒扫','j','djhdjh') insert into student v ...
- mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法
[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...
- 在mysql数据库中创建oracle scott用户的四个表及插入初始化数据
在mysql数据库中创建oracle scott用户的四个表及插入初始化数据 /* 功能:创建 scott 数据库中的 dept 表 */ create table dept( deptno int ...
随机推荐
- 使用Coding体验小记
https://coding.net/ 写了些小程序后放在github上托管,并用gitpages展示. 今天发现用git pages展示的网页网络特别不稳定,时常会出现网页打不开的现象. 之前一直通 ...
- 设计模式(四) Factory Pattern工厂模式
核心: 实例化对象,实现创建者和调用者的分离 简单工厂模式 工厂方法模式 抽象工厂模式 面对对象设计的基本原则: ocp(open closed principle) 开闭原则:一个软件的实体应当对拓 ...
- uni-app去掉h5端的导航栏
找到项目的根目录下的pages.json文件,添加一下内容,可以去掉对应页面的导航栏 附上代码 "app-plus":{ "titleNView": false ...
- rm
rm [选项]... 目录... 删除指定的<文件>(即解除链接). -d --directory 删除可能仍有数据的目录 (只限超级用户)-f --force ...
- FileNotFoundException报错, src\main\....\....(拒绝访问) , 原因:1. 方法没有判断文件夹和文件, 2.没有指明文件的具体路径和名字
- SpringMVC获取页面表单参数的几种方式
以下几种方式只有在已搭好的SpringMVC环境中,才能执行成功! 首先,写一个登陆页面和一个Bean类 <%@ page language="java" co ...
- 7 个最佳的 Java 框架
毫无疑问,Java是目前最需要的编程语言之一.在这里,我们已经挖掘了一些关于框架趋势的有用信息,以减轻全球软件开发人员的日常工作. 根据RebelLabs,也是在线Java用户组(虚拟JUG)的媒体盟 ...
- openstack环境搭建常用命令
1,编辑/etc/selinux/config文件,关闭selinux SELINUX=disabled 2,清空iptables规则并保存 # iptables -F # service iptab ...
- mui 访问系统相册将图片显示到网页
访问系统相返回值为一个对象,通过转换为字符串可以查看,path.files[0]为返回路径去除路径赋值到src 调用摄像头返回的相片的path为一个路径通过 plus.io.resolveLocalF ...
- lua中产生 1 - n 之间不重复随机数
local function GetRandomNumList(len) local rsList = {} ,len do table.insert(rsList,i) end local num, ...