## NPOI导入数据到数据库

NPOI导入数据到数据库

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NPOI_FromExcelToDatabase02
{
    using System.Data.SqlClient;
    using NPOI.SS.UserModel;
    using NPOI.HSSF.UserModel;
    using System.Data;
    using System.IO;

    public class Program
    {
        private static void Main(string[] args)
        {
            //获取数据库连接字符串
            string excelConnectionString = "Data Source=KAKA-20200829GR;Initial Catalog=DbForNPOI;Integrated Security=True";

            //实例化数据库连接对象 构造函数传参,指定连接到哪个数据库
            using (SqlConnection connection = new SqlConnection(excelConnectionString))
            {
                //实例化数据适配器对象,根据sql语句到到指定的数据库匹配数据
                using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("select * from BookInfo", connection))
                {
                    //实例化数据表对象 将 Excel表格中的数据暂存到这里,可视为中间容器
                    DataTable ExcelDataTable = new DataTable();

                    //实例化大批量复制的对象,构造函数传参:指定数据库,并指定数据表
                    SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection) { DestinationTableName = "BookInfo" };

                    //打开数据库连接
                    connection.Open();

                    //适配器填充模式 参数一 DataTable的实例,参数二 数据源格式
                    sqlDataAdapter.FillSchema(ExcelDataTable, SchemaType.Source);

                    //实例化 hssf 工作簿对象,打开并读取指定的文件,注:该对象只支持xls格式 NPOI
                    HSSFWorkbook hSSFWorkbook = new HSSFWorkbook(File.OpenRead(@"D:\Users\Desktop\BookInfo.xls"));

                    //获取指定的数据表,为当前工作簿中的第一张表 下标为0  NPOI
                    ISheet sheet = hSSFWorkbook.GetSheetAt(0);

                    //遍历数据表中的所有行
                    for (int RowIndex = 1; RowIndex < sheet.LastRowNum; RowIndex++)
                    {
                        //实例化 数据行对象 为 DatatTable实例的新建行 ADO
                        DataRow newRow = ExcelDataTable.NewRow();

                        //获取每一行数据  NPOI
                        IRow excelRow = sheet.GetRow(RowIndex);

                        //将NPOI 我的数据库中存了三列所以这里的下表为 0 1 2,根据具体情况进行操作 同时单元格数据类型和数据库中的类型保持一致
                        newRow[0] = excelRow.Cells[0].NumericCellValue;
                        newRow[1] = excelRow.Cells[1].StringCellValue;
                        newRow[2] = excelRow.Cells[2].StringCellValue;

                        //获取到的每一行数据 保存到DataTable对象的实例中
                        ExcelDataTable.Rows.Add(newRow);
                    }

                    //判断 DataTable对象是否为空,以及行数是否大于0
                    if (ExcelDataTable != null && ExcelDataTable.Rows.Count > 0)
                    {
                        //如果有输入,就将DataTable中的数据写入数据库
                        sqlBulkCopy.WriteToServer(ExcelDataTable);
                    }

                    //关闭复制对象
                    sqlBulkCopy.Close();

                    //释放适配器对象资源
                    sqlDataAdapter.Dispose();

                    //关闭连接
                    connection.Close();

                    //导入成功 友好提示
                    if (sqlBulkCopy != null)
                    {
                        Console.WriteLine("From Excel To DataBase Completed");
                    }

                    Console.ReadKey();
                }
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值