博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入
阅读量:4687 次
发布时间:2019-06-09

本文共 6479 字,大约阅读时间需要 21 分钟。

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>节点下添加

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();        }        ///         /// SQLBulkCopy的批量插入        ///         /// 
[HttpGet] public string Get_MuliteAdd_SQL() { //调用Sql的批量新增 string str = service.MuliteAdd_SQL(); return str; } /// /// OracleBulkCopy的批量插入 /// ///
[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    {        ///         /// SqlBulkCopy的批量插入10000条数据        ///         /// 
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 = 0; i < 10000; i++) { //为datarow的行的列赋值 DataRow row = dt.NewRow(); row["stuId"] = (i+1); row["stuName"] = "学生"+ (i+1); row["stuAddress"] = "不详"+(i+1); //添加到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; } /// /// OracleBulkCopy的批量插入10000条数据 /// ///
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 = 0; i < 10000; i++) { //为datarow的行的列赋值 DataRow row = dt.NewRow(); row["STUID"] = (i + 1); row["STUNAME"] = "学生" + (i + 1); row["STUADDRESS"] = "不详" + (i + 1); //添加到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页面代码

    
Sql和Oracle的BulkCopy 使用

Sql和Oracle的BulkCopy 使用

3、界面演示及效果

1)index页面效果

2)sql数据表效果

3)oracle数据表效果

4、demo源码下载地址:

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

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

 

转载于:https://www.cnblogs.com/xielong/p/9123351.html

你可能感兴趣的文章
常见批处理作业调度算法
查看>>
python安装(不影响系统自带python)
查看>>
OpenCV Show Image cvShowImage() 使用方法
查看>>
[CareerCup] 7.6 The Line Passes the Most Number of Points 经过最多点的直线
查看>>
[LeetCode] Parse Lisp Expression 解析Lisp表达式
查看>>
HTML5微数据学习笔记
查看>>
数据结构之-冒泡排序
查看>>
【基础练习】【区间DP】codevs1090 加分二叉树题解
查看>>
HTML5:web socket 和 web worker
查看>>
[转载]从零开始学习OpenGL ES之五 – 材质
查看>>
mobiscroll手机端插件 好用(时间、日历、颜色)
查看>>
利用vertical-align:middle实现在整个页面居中
查看>>
★★停止动画和停止所有动画$(selector).stop() 详解
查看>>
160429、nodejs--Socket.IO即时通讯
查看>>
Poj2826 An Easy Problem
查看>>
ZipUtils
查看>>
浏览器最大连接数
查看>>
memcached系列之二
查看>>
about mobile web
查看>>
ajax 的post方法用例(带循环)
查看>>