Excel导入数据库百万级数据瞬间插入

前言

   之前公司有个需求,导入几十万的数据,需要从excel读取出来,再把重复的项合并起来导入数据库,当时用程序写的非常慢,光读取数据半小时都下不来,感觉自己写的程序太渣了.

 

思路

  1.将Excel文件转换成.csv文件

 2.读取.csv文件到DataTable里 (这个读取速度非常快)

   3.补充数据表的列名,修改数据类型

 4.使用SqlBulkCopy将DataTable中的数据批量插入数据库(这里就是瞬间插入的秘籍)

 

实现

  下边直接上代码了 需要nuget安装  Microsoft.Office.Interop.Excel

 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using Excel=Microsoft.Office.Interop.Excel;
using System.Data.SqlClient;

namespace excel转csv
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 将Csv文件转换为XLS文件
        /// </summary>
        /// <param name="FilePath">文件全路路径</param>
        /// <returns>返回转换后的Xls文件名</returns>
        public static string CSVSaveasXLS(string FilePath)
        {
            QuertExcel();
            string _NewFilePath = "";

            Excel.Application excelApplication;
            Excel.Workbooks excelWorkBooks = null;
            Excel.Workbook excelWorkBook = null;
            Excel.Worksheet excelWorkSheet = null;

            try
            {
    
//此时报错
:无法嵌入互操作类型“……”,请改用适用的接口的解决方法

         //解决方案:选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。
                excelApplication = new Excel.ApplicationClass();
                excelWorkBooks = excelApplication.Workbooks;
                excelWorkBook = ((Excel.Workbook)excelWorkBooks.Open(FilePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value));
                excelWorkSheet = (Excel.Worksheet)excelWorkBook.Worksheets[1];
                excelApplication.Visible = false;
                excelApplication.DisplayAlerts = false;
                _NewFilePath = FilePath.Replace(".csv", ".xls");
                excelWorkBook.SaveAs(_NewFilePath, Excel.XlFileFormat.xlAddIn, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                excelWorkBook.Close();
                QuertExcel();
                // ExcelFormatHelper.DeleteFile(FilePath);
                //可以不用杀掉进程QuertExcel();


                GC.Collect(System.GC.GetGeneration(excelWorkSheet));
                GC.Collect(System.GC.GetGeneration(excelWorkBook));
                GC.Collect(System.GC.GetGeneration(excelApplication));

            }
            catch (Exception exc)
            {
                throw new Exception(exc.Message);
            }

            finally
            {
                GC.Collect();
            }

            return _NewFilePath;
        }



        /// <summary>
        /// 将xls文件转换为csv文件
        /// </summary>
        /// <param name="FilePath">文件全路路径</param>
        /// <returns>返回转换后的csv文件名</returns>
        public static string XLSSavesaCSV(string FilePath)
        {
            QuertExcel();
            string _NewFilePath = "";

            Excel.Application excelApplication;
            Excel.Workbooks excelWorkBooks = null;
            Excel.Workbook excelWorkBook = null;
            Excel.Worksheet excelWorkSheet = null;

            try
            {
                excelApplication </
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于Excel表格后端导入并将数据插入数据库的操作,您可以按照以下步骤进行: 1. 首先,您需要选择一个适合的编程语言和框架来实现这个功能,比如Python和Django、Flask等。 2. 在您的代码中导入所需的库,比如pandas用于读取Excel数据,以及相应的数据库连接库,比如MySQLdb、psycopg2等。 3. 使用pandas库的`read_excel`函数来读取Excel文件,并将数据存储在一个DataFrame对象中。例如: ```python import pandas as pd df = pd.read_excel('your_excel_file.xlsx') ``` 4. 连接到您的数据库,并创建一个数据库连接对象。具体连接方式取决于您使用的数据库类型和库。以下是一个MySQL数据库连接的示例: ```python import MySQLdb db = MySQLdb.connect(host='your_host', user='your_user', passwd='your_password', db='your_database') ``` 5. 创建一个游标对象,用于执行SQL查询和操作数据库。例如: ```python cursor = db.cursor() ``` 6. 遍历DataFrame中的每一行,将数据插入数据库中。您可以使用INSERT语句将数据插入数据库表中。以下是一个示例代码: ```python for index, row in df.iterrows(): sql = "INSERT INTO your_table_name (column1, column2, ...) VALUES (%s, %s, ...)" values = (row['column1'], row['column2'], ...) cursor.execute(sql, values) ``` 7. 在完成所有插入操作后,记得提交事务和关闭数据库连接: ```python db.commit() cursor.close() db.close() ``` 以上是一个简单的示例,您可以根据实际情况进行调整和优化。同时,请确保您已经正确安装了所需的库,并且具备访问数据库的权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值