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 = 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; } /// <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 = 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页面代码
<!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引用了。
原文地址:https://www.cnblogs.com/xielong/p/9123351.html
时间: 2024-09-30 04:56:50