ASP.NET WebApi一括インポートデータベース
データベースの一括インポート
最近では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
批判と指摘を歓迎する.