1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace NPOI_FromExcelToDatabase02
8 {
9 using System.Data.SqlClient;
10 using NPOI.SS.UserModel;
11 using NPOI.HSSF.UserModel;
12 using System.Data;
13 using System.IO;
14
15 public class Program
16 {
17 private static void Main(string[] args)
18 {
19 //获取数据库连接字符串
20 string excelConnectionString = "Data Source=KAKA-20200829GR;Initial Catalog=DbForNPOI;Integrated Security=True";
21
22 //实例化数据库连接对象 构造函数传参,指定连接到哪个数据库
23 using (SqlConnection connection = new SqlConnection(excelConnectionString))
24 {
25 //实例化数据适配器对象,根据sql语句到到指定的数据库匹配数据
26 using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("select * from BookInfo", connection))
27 {
28 //实例化数据表对象 将 Excel表格中的数据暂存到这里,可视为中间容器
29 DataTable ExcelDataTable = new DataTable();
30
31 //实例化大批量复制的对象,构造函数传参:指定数据库,并指定数据表
32 SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection) { DestinationTableName = "BookInfo" };
33
34 //打开数据库连接
35 connection.Open();
36
37 //适配器填充模式 参数一 DataTable的实例,参数二 数据源格式
38 sqlDataAdapter.FillSchema(ExcelDataTable, SchemaType.Source);
39
40 //实例化 hssf 工作簿对象,打开并读取指定的文件,注:该对象只支持xls格式 NPOI
41 HSSFWorkbook hSSFWorkbook = new HSSFWorkbook(File.OpenRead(@"D:\Users\Desktop\BookInfo.xls"));
42
43 //获取指定的数据表,为当前工作簿中的第一张表 下标为0 NPOI
44 ISheet sheet = hSSFWorkbook.GetSheetAt(0);
45
46 //遍历数据表中的所有行
47 for (int RowIndex = 1; RowIndex < sheet.LastRowNum; RowIndex++)
48 {
49 //实例化 数据行对象 为 DatatTable实例的新建行 ADO
50 DataRow newRow = ExcelDataTable.NewRow();
51
52 //获取每一行数据 NPOI
53 IRow excelRow = sheet.GetRow(RowIndex);
54
55 //将NPOI 我的数据库中存了三列所以这里的下表为 0 1 2,根据具体情况进行操作 同时单元格数据类型和数据库中的类型保持一致
56 newRow[0] = excelRow.Cells[0].NumericCellValue;
57 newRow[1] = excelRow.Cells[1].StringCellValue;
58 newRow[2] = excelRow.Cells[2].StringCellValue;
59
60 //获取到的每一行数据 保存到DataTable对象的实例中
61 ExcelDataTable.Rows.Add(newRow);
62 }
63
64 //判断 DataTable对象是否为空,以及行数是否大于0
65 if (ExcelDataTable != null && ExcelDataTable.Rows.Count > 0)
66 {
67 //如果有输入,就将DataTable中的数据写入数据库
68 sqlBulkCopy.WriteToServer(ExcelDataTable);
69 }
70
71 //关闭复制对象
72 sqlBulkCopy.Close();
73
74 //释放适配器对象资源
75 sqlDataAdapter.Dispose();
76
77 //关闭连接
78 connection.Close();
79
80 //导入成功 友好提示
81 if (sqlBulkCopy != null)
82 {
83 Console.WriteLine("From Excel To DataBase Completed");
84 }
85
86 Console.ReadKey();
87 }
88 }
89 }
90 }
91 }