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 }