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 }