C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入
阿新 • • 發佈:2018-06-01
strings 技術 ava ext service() catch service 目標表 num
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, stuNamevarchar(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引用了。
C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入