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. Mybatis的SqlSession理解(一)

    SqlSession是Mybatis最重要的构建之一,可以认为Mybatis一系列的配置目的是生成类似JDBC生成的Connection对象的statement对象,这样才能与数据库开启“沟通”,通过 ...

  2. Eclispe中编辑xml配置文件时不会提示也不能自动调整格式

    创建了一个xml文件后,发现编辑起来和原来的那些有所不同,不会提示补全.也不能自动调整格式???woc? 哈哈哈哈哈,“我最恨你像个石头一样” 后来发现是编辑器被改了!!! 右键xml文件然后open ...

  3. Wiener’s attack python

    题目如下: 在不分解n的前提下,求d. 给定: e = 140586954170153340715880103465867497905399132874997078029388987191993846 ...

  4. Linux 中 MySQL常用命令

    一. 数据库登录mysql -uroot -p二..退出数据库quit 和 exit或ctrl + d三.数据库操作1. 查看所有数据库 show databases;2. 查看当前使用的数据库sel ...

  5. Inception Network

    1. 下图为一个Inception 模块,即将输入的图像通过多种过滤器或者池化操作后,全部再给拼起来形成新的图像. 2. Inception 网络就是讲将多个Inception模块连起来而已,如下图的 ...

  6. Golang socket

    1.本例子实现了一个简单的TCP echo.客户端发送Hello,服务端回应World. 参考:<Socket编程> 2.服务端代码 package main import ( " ...

  7. zlib 2.1.8 编译遇到的问题以及解决方法

    环境:win7 x64 + vs2013 1.用vs2013打开zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln进行编译 包含了下面的的多个项目: miniunz: ...

  8. Axure 元件焦点的控制

    讲解如何控制光标的位置,主要学习了以下三种场景: 1.点击邮箱或者密码时,光标分别自动定位到email.password的文本框处: 2.还有将密码对应的文本框的内容设置为密码的格式(····) 3. ...

  9. 绕过cookies进行登录并封装请求方法

    之前写了一篇使用session跨请求保持会话的帖子,这次在它的基础上对请求方法简单封装一下,可以达到复用的效果 1.先定义登录方法 在登录方法中利用session跨请求保持会话,并返回session, ...

  10. ubuntu解压和压缩文件

    .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...