ASP.NET WebApi一括インポートデータベース

29832 ワード

データベースの一括インポート


最近ではWebApiプロジェクト開発において,ユーザ情報の一括導入機能が用いられている.以下、知識を簡単にまとめて皆さんと共有します(最も重要なのは、データベースを一括導入する考え方です).
アイデア:WebApiプロジェクトでは、一括インポートを実現し、クライアントブラウザを通じてサーバにデータをアップロードする.サーバ側とクライアントは基本的に分離されているため(サーバ本体を除く).したがって、データを一括入力するロジック:まず、Excelファイルをサーバにアップロードします.次に、サーバー側でExcelファイルを読み込み、データ情報を挿入可能なデータセットに変換し、一括データベース挿入操作を実行します.
実現方法:1.プロジェクトにNPOIプラグインを導入する:http://download.csdn.net/download/realjh/10108407 2.クライアントブラウザページからformフォーム形式で、Excelの一括データファイルを提出します.3.サーバー側は、クライアントブラウザから送信されたExcelファイルストリームを受信し、サーバー側でExcelファイルの名前を変更します.4.次に、サーバー側でインポートするExcelファイルが存在することを検出し、存在する場合はデータを読み込み、一括挿入データベース操作を実行します.
コードは次のように実装されます. /// /// /// /// [HttpPost, Route("import")] public IHttpActionResult ImportExcelToDatabase() { // form excel var file = HttpContext.Current.Request.Files["File"]; // excel string[] extensionName = new string[] { ".XLSX", ".XLS" }; string serverPath = string.Empty;// // excel // ( , excel ) // excel if (!string.IsNullOrWhiteSpace(file.FileName)) { // string newName = string.Empty; // excel string extName = Path.GetExtension(file.FileName); // string rootPath = AppDomain.CurrentDomain.BaseDirectory; // string fullPath = string.Empty; // excel if (extensionName.Contains(extName.ToUpper())) { // newName = Guid.NewGuid().ToString(); // newName = newName + extName; // serverPath = "Excels/"; //+ newName; fullPath = rootPath + serverPath; // if (!Directory.Exists(fullPath)) { // , Directory.CreateDirectory(fullPath); } // , try { // file.SaveAs(HttpContext.Current.Server.MapPath("~/" + serverPath + newName)); // , fullPath = fullPath + newName; string message = string.Empty; #region // Excel , sql , 。 , , sql , 。 Dictionary<string, string> dictionaryColumn = new Dictionary<string, string>(); dictionaryColumn.Add("Emp_NO", " "); dictionaryColumn.Add("Emp_Name", " "); dictionaryColumn.Add("Emp_Sex", " "); dictionaryColumn.Add("Emp_Native", " "); dictionaryColumn.Add("Emp_Birthday", " "); dictionaryColumn.Add("Emp_IDCard", " "); dictionaryColumn.Add("Emp_ToWorkDate", " "); dictionaryColumn.Add("Emp_ArriveDate", " "); dictionaryColumn.Add("Emp_DeptId", " "); dictionaryColumn.Add("Emp_VirtualNum", " "); dictionaryColumn.Add("Emp_Remark", " "); string[] Column = new string[] { " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " }; #endregion bflag = ImportDataToDataBase(fullPath, ref message, dictionaryColumn, Column); msg = message; } catch { // File.Delete(fullPath); } finally { // , , ! file.InputStream.Close(); file.InputStream.Dispose(); if (!bflag) { // File.Delete(fullPath); } } } else { msg = " , , :.xlsx,.xls !"; } } else { msg = " , excel !"; } return MyJson(new { flag = bflag, msg = msg }); } /// /// excel , /// /// /// /// /// /// private bool ImportDataToDataBase(string fullPath, ref string message, Dictionary<string, string> dic, string[] column) { bool aflag = false; // if (File.Exists(fullPath)) { #region excel using (FileStream file = new FileStream(fullPath, FileMode.Open, FileAccess.Read)) { // excel IWorkbook workBook = new XSSFWorkbook(file); // Excel sheet if (workBook.NumberOfSheets > 0) { #region // IRow row = null; // ICell cell = null; // sheet ISheet sheet = null; // sql list List<string> query = new List<string>(); #endregion #region string password = string.Empty; sql = "select Param_Value from PUB_Param where Param_Status='1' and Param_Id='1'"; DataTable dt = DB.ListDataTable(sql); if (dt.Rows.Count > 0) { password = dt.Rows[0].ItemArray[0].ToString(); } #endregion #region string emp_no = string.Empty; sql = "select Emp_NO from HR_Employee "; dt = DB.ListDataTable(sql); #endregion for (int v = 0; v < workBook.NumberOfSheets; v++) { #region sheet string sexValue = string.Empty; string deptValue = string.Empty; // Sheet , , sheet = workBook.GetSheetAt(v); for (int i = 0; i < sheet.LastRowNum + 1; i++) { // : //i=0 excel //i>=1 excel // excel , if (i == 0) { #region excel , // cell row = sheet.GetRow(i); // excel sheet bool bflag = false; // if (row.Cells.Count == dic.Count) { for (int j = 0; j < row.Cells.Count; j++) { // excel if (!dic.ContainsValue(row.Cells[j].StringCellValue) && (column[j] != row.Cells[j].StringCellValue)) { message = " ,sheet [" + workBook.GetSheetAt(v).SheetName + "] ,Excel !"; // bflag = true; break; } } // if (bflag) { break; } } else { message = " ,sheet [" + workBook.GetSheetAt(v).SheetName + "] ,Excel !"; } #endregion } else { // excel row = sheet.GetRow(i); try { #region sexValue = row.Cells[2].StringCellValue; if (!string.IsNullOrWhiteSpace(sexValue) && sexValue.Contains("*")) { sexValue = sexValue.Split(new char[1] { '*' })[0];//Emp_Sex id } else { sexValue = "56";// } #endregion #region id deptValue = row.Cells[8].StringCellValue; if (!string.IsNullOrWhiteSpace(deptValue) && deptValue.Contains("*")) { deptValue = deptValue.Split(new char[1] { '*' })[0]; } else { message = " [ " + row.Cells[1].StringCellValue + " ] , excel !"; return aflag; } #endregion #region if (dt.Rows.Count > 0) { for (int k = 0; k < dt.Rows.Count; k++) { if (ConvertNullToString.GetString(dt.Rows[k].ItemArray[0]) == ConvertNullToString.GetString(row.Cells[0].StringCellValue)) { message = " [ " + row.Cells[1].StringCellValue + " ] , !"; return aflag; } } } #endregion #region int emp_id = SequenceManager.Instance.GetSequence("Employee"); sql = @"insert into employee( Emp_Id,Emp_NO,Emp_Name,Emp_Sex,Emp_Native,Emp_Birthday,Emp_IDCard,Emp_ToWorkDate,Emp_ArriveDate,Emp_DeptId,Emp_VirtualNum,Emp_Remark,Emp_Status ) values('" + emp_id + "','" + ConvertNullToString.GetString(row.Cells[0].StringCellValue) + "','" + ConvertNullToString.GetString(row.Cells[1].StringCellValue) + "','" + sexValue + "','" + row.Cells[3].StringCellValue + "','" + row.Cells[4].DateCellValue.ToString("yyyy-MM-dd") + "','" + row.Cells[5].StringCellValue + "','" + row.Cells[6].DateCellValue.ToString("yyyy-MM-dd") + "','" + row.Cells[7].DateCellValue.ToString("yyyy-MM-dd") + "','" + deptValue + "','" + ConvertNullToString.GetString(row.Cells[9].StringCellValue) + "','" + row.Cells[10].StringCellValue + "','1')"; query.Add(sql); #endregion #region int user_id = SequenceManager.Instance.GetSequence("User"); sql = "insert into User(User_Id, Emp_Id, User_NO, User_Name, User_Sex, Dept_Id, User_PassWord, User_PYCode, User_Status,Modified_Date)values('" + user_id + "', '" + emp_id + "', '" + ConvertNullToString.GetString(row.Cells[0].StringCellValue) + "', '" + ConvertNullToString.GetString(row.Cells[1].StringCellValue) + "', '" + sexValue + "', '" + deptValue + "', '" + MD5Encode.Encode(password) + "', '', '1', getdate())"; query.Add(sql); #endregion #region sql = "insert into Group(Group_Id, User_Id, Modified_Date,Use_Status)values(3,'" + user_id + "', getdate(),'1')"; query.Add(sql); #endregion } catch { message = "sheet [" + workBook.GetSheetAt(v).SheetName + " ] , [" + row.Cells[1].StringCellValue + "] !"; // workBook.Close(); // file.Flush(); // file.Dispose(); } } } //sql , DB.ExecuteForList(query); aflag = true; message = "sheet [" + workBook.GetSheetAt(v).SheetName + " ] !"; #endregion } } else { message = "Excel sheet , , !"; } }//end using filestream #endregion } else { message = " , !"; } return aflag; }
説明:この文章は主に大量にExcel表のデータをデータベースに導入することを実現することを提供して、まだ多くの地方が改善しなければならなくて、後期に単独で学習して完備して、プロジェクトの中でもっと良くて更に柔軟な大量のデータの入力を実現することができます.これは、excelワークシートのデータを柔軟に取得するための最新の最適化ソリューションです.http://blog.csdn.net/realjh/article/details/78857387
批判と指摘を歓迎する.