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. WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.

    点击报错信息中的app, 按照提示,修改compile 为 implementation 再次同步即可 结果

  2. 获取指定tag的代码

    git checkout v1.0.3 再使用ls查看就可以了

  3. vs2015 VS-Visual Studio-IIS Express 支持局域网访问

    使用Visual Studio开发Web网页的时候有这样的情况:想要在调试模式下让局域网的其他设备进行访问,以便进行测试.虽然可以部署到服务器中,但是却无法进行调试,就算是注入进程进行调试也是无法达到 ...

  4. np.zeros

    np.zeros构造一个全部由0组成的矩阵 用法:zeros(shape, dtype = float, order = 'C') 参数: shape:形状 dtype类型: t ,位域,如t4代表4 ...

  5. 《剑指offer》第六十四题(求1+2+…+n)

    // 面试题64:求1+2+…+n // 题目:求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case // 等关键字及条件判断语句(A?B:C). #inc ...

  6. 《剑指offer》第六十六题(构建乘积数组)

    // 面试题66:构建乘积数组 // 题目:给定一个数组A[0, 1, …, n-1],请构建一个数组B[0, 1, …, n-1],其 // 中B中的元素B[i] =A[0]×A[1]×… ×A[i ...

  7. anaconda 安装包

    很多包在anaconda navigator里搜不到 如果为了在host编译opencv而在bashrc和profile里屏蔽了anaconda的路径,则 使用$HOME/anaconda3/bin/ ...

  8. (转)Qt中图片相对位置的引用

    原文作者:locky1218 原文地址:https://blog.csdn.net/locky1218/article/details/9749703/   一般使用相对位置的时候可能无法显示图片,可 ...

  9. 第 8 章 容器网络 - 060 - 在 Docker 中使用 flannel

    在 Docker 中使用 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd/system/docker.service.d/10-machine.conf 设置 ...

  10. ThinkPHP表单自动验证(注册功能)

    控制器中: 模型中: 视图中: