zoukankan      html  css  js  c++  java
  • C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入

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

  • 相关阅读:
    《数据结构和Java集合框架》第二章学习笔记
    《数据结构和Java集合框架》第一章学习笔记
    Arbotix关节控制器的实现(十)
    Arbotix关节控制器的实现(九)
    MoveIt编程实现机械臂自主避障运动(六)
    ROS机械臂开发_MoveIt!与机械臂控制(七)
    IOI2020国家集训队作业选做Part1
    模拟费用流问题略解
    PKUSC2021部分题目简要题解
    ARC 119部分题目简要题解
  • 原文地址:https://www.cnblogs.com/xielong/p/9123351.html
Copyright © 2011-2022 走看看