一、操作NPOI从Excel中导入数据到SqlServer数据库中_xls格式

 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:UsersDesktopBookInfo.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 }
原文地址:https://www.cnblogs.com/ABC-wangyuhan/p/13753448.html