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_FromExcelToDatabase05
8 {
9 using System.Data.SqlClient;
10 using NPOI.HSSF.UserModel;
11 using NPOI.SS.UserModel;
12 using System.IO;
13 using System.Data;
14 using System.Xml.Serialization;
15
16 internal class Program
17
18 {
19 private static void Main(string[] args)
20 {
21 //初始化数据库连接对象
22 using (SqlConnection connection = new SqlConnection("Data Source=KAKA-20200829GR;Initial Catalog=DbForNPOI;Integrated Security=True"))
23 {
24 //根据具体的sql语句初始化适配器对象
25 using (SqlDataAdapter adapter = new SqlDataAdapter("select * from BookInfo", connection))
26 {
27 //实例化数据表对象
28 DataTable dataTable = new DataTable();
29
30 //初始化批量赋值对象 并指定数据表
31 SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection) { DestinationTableName = "BookInfo" };
32
33 //适配器中填充数据表
34 adapter.FillSchema(dataTable, SchemaType.Source);
35
36 //实例化NPOI工作簿对象,打开文件并读取文件内容,HSSFWorkbook 对象只支持.xls后缀的表格
37 HSSFWorkbook hSSFWorkbook = new HSSFWorkbook(File.OpenRead(@"D:\Users\Desktop\BookInfo.xls"));
38
39 //获取工作簿中的第一张表
40 ISheet sheet = hSSFWorkbook.GetSheetAt(0);
41
42 //循环表,最大长度为表的最后一行行号
43 for (int RowIndex = 1; RowIndex < sheet.LastRowNum; RowIndex++)
44 {
45 //dataTable 对象中创建行
46 DataRow dataRow = dataTable.NewRow();
47
48 //NPOI 创建单元格
49 IRow cells = sheet.GetRow(RowIndex);
50
51 //将NPOI获取的单元格数据分别赋值给dataRow
52 dataRow[0] = cells.GetCell(0).NumericCellValue;
53 dataRow[1] = cells.GetCell(1).StringCellValue;
54 dataRow[2] = cells.GetCell(2).StringCellValue;
55
56 //数据表中的所有行添加新获取的数据行
57 dataTable.Rows.Add(dataRow);
58 }
59
60 //如果数据表对象的行数大于零说明拿到数据了
61 if (dataTable.Rows.Count > 0)
62 {
63 //打开数据库连接 数据库连接时机,晚打开,早关闭
64 connection.Open();
65
66 //将复制到的对象写入到数据库中
67 sqlBulkCopy.WriteToServer(dataTable);
68
69 //关闭复制对象
70 sqlBulkCopy.Close();
71
72 //释放适配器资源
73 adapter.Dispose();
74
75 //关闭数据库连接
76 connection.Close();
77
78 //友好提示
79 if (sqlBulkCopy != null)
80 {
81 Console.WriteLine(dataTable.Rows.Count);
82
83 Console.WriteLine("数据导入到数据库成功");
84
85 Console.ReadKey();
86 }
87 }
88 }
89 }
90 }
91 }
92 }