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引用了。