Excel—— [导入到数据库] or 将数据 [导入到Excel]

时间:2022-10-20 12:40:31

将Excel导入到数据库实现如下:

前台代码:

Excel—— [导入到数据库] or 将数据 [导入到Excel]Excel—— [导入到数据库] or 将数据 [导入到Excel]
@model IEnumerable<Model.Student>
@{
Layout
= null;
}

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/js/jquery.min.js"></script>
<script>
function ExcInput()
{
location.href
= "/Home/ExcInput";
}
</script>
</head>
<body>
<div>
<form action="/Home/Execl" method="post" enctype="multipart/form-data">
<input type="file" name="Exc" />
<input type="submit" value="导入" />
</form>

<input type="submit" value="导出" onclick="ExcInput()"/>
<table id="table">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>
@foreach (
var item in Model)
{
<tr>
<td>@item.id</td>
<td>@item.name</td>
<td>@item.age</td>
<td>@item.sex</td>
</tr>
}
</table>
</div>
</body>
</html>
View Code

后台代码:

Excel—— [导入到数据库] or 将数据 [导入到Excel]Excel—— [导入到数据库] or 将数据 [导入到Excel]
 /// <summary>
/// 初始化页面
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
DAL.StudentDal dal
= new DAL.StudentDal();
List
<Student> ls = dal.GetStudentList();
return View(ls);
}
/// <summary>
/// Excel上传部分
/// 导入 Import
/// </summary>
/// <param name="Exc"></param>
/// <returns></returns>
[HttpPost]
public ActionResult Execl(HttpPostedFileBase Exc)
{
#region /// 上传部分

//如果当前的网站目录为E:\wwwroot 应用程序虚拟目录为E:\wwwroot\company 浏览的页面路径为E:\wwwroot\company\news\show.asp
//在show.asp页面中使用
//Server.MapPath("./") 返回路径为:E:\wwwroot\company\news
//Server.MapPath("/") 返回路径为:E:\wwwroot
//Server.MapPath("../") 返回路径为:E:\wwwroot\company
//Server.MapPath("~/") 返回路径为:E:\wwwroot\company

string strfileName = Server.MapPath("/Word/"); //存储文件的地方

if (!Directory.Exists(strfileName)) //判断文件路径是否存在
{
Directory.CreateDirectory(strfileName);
}
string fName = Path.GetFileName(Exc.FileName); //获取文件名
Exc.SaveAs(strfileName + fName);

#endregion

#region /// Execl导入部分

//execl文件读取
ExcelDAL exc = new ExcelDAL();
DataTable dt
= exc.ExcelToDS(strfileName + fName);

//把读取的数据导入到数据库
DAL.StudentDal dal = new DAL.StudentDal();
foreach (DataRow dr in dt.Rows)
{
Student student
= new Student();
student.id
= Convert.ToInt32(dr[0]);
student.name
= dr[1].ToString();
student.sex
= dr[2].ToString();
student.age
= Convert.ToInt32(dr[3]);
dal.Add(student);
}

#endregion

List
<Student> ls = dal.GetStudentList();//查询出所有数据

return View("Index", ls);
}
View Code

Excel导入导出帮助类 ExcelDAL.cs

Excel—— [导入到数据库] or 将数据 [导入到Excel]Excel—— [导入到数据库] or 将数据 [导入到Excel]
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Model;
using System.Data.OleDb;

namespace DAL
{
/// <summary>
///
/// </summary>
public class ExcelDAL
{
/// <summary>
/// 将excel中的数据取出,填充到dataset中
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public DataTable ExcelToDS(string path)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0;";

OleDbConnection conn
= new OleDbConnection(strConn);
OleDbDataAdapter oda
= new OleDbDataAdapter("select * from [Sheet1$]", conn);
DataSet ds
= new DataSet();
oda.Fill(ds);
return ds.Tables[0];
}

/// <summary>
/// 将单条数据插入到excel中
/// </summary>
/// <param name="path"></param>
/// <param name="e"></param>
/// <returns></returns>
public int ExcelToAdd(string path, Student student)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0;";

OleDbConnection conn
= new OleDbConnection(strConn);
conn.Open();
string SQL = "INSERT INTO [Sheet2$] ([编号],[姓名],[性别],[年龄]) VALUES(" + student.id + ",'" + student.name + "','" + student.sex + "'," + student.age + ")";
OleDbCommand cmd
= new OleDbCommand(SQL, conn);
int i = cmd.ExecuteNonQuery();
conn.Close();
conn.Dispose();
return i;
}

/// <summary>
/// 通过循环将list中的数据插入到excel中
/// </summary>
/// <param name="path">excel的路径</param>
/// <param name="studentList">数据集合</param>
/// <returns></returns>
public int ExcelToAdd(string path, List<Student> studentList)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0;";

OleDbConnection conn
= new OleDbConnection(strConn);
conn.Open();

OleDbCommand cmd
= new OleDbCommand("CREATE TABLE [Sheet1] ([编号] INT,[姓名] Text,[性别] Text,[年龄] int)", conn);
cmd.ExecuteNonQuery();

foreach (Student e in studentList)
{
string SQL = "INSERT INTO [Sheet1$] ([编号],[姓名],[性别],[年龄]) VALUES(" + e.id + ",'" + e.name + "','" + e.sex + "'," + e.age + ")";
cmd
= new OleDbCommand(SQL, conn);
int i = cmd.ExecuteNonQuery();
}
conn.Close();
conn.Dispose();
return 1;
}
}
}
View Code

将数据库内容导出到Excel实现:

后台代码:

Excel—— [导入到数据库] or 将数据 [导入到Excel]Excel—— [导入到数据库] or 将数据 [导入到Excel]
  /// <summary>
/// 导出 export
/// </summary>
/// <returns></returns>
public ActionResult ExcInput()
{
#region /// 查询部分

DAL.StudentDal dal
= new DAL.StudentDal();
List
<Student> ls = dal.GetStudentList();

#endregion

ExcelDAL exc
= new ExcelDAL();

exc.ExcelToAdd(
"D:/studentDemo.xls", ls);
return View();
}
View Code

前台界面如下:

 Excel—— [导入到数据库] or 将数据 [导入到Excel]

需要注意的:

Excel—— [导入到数据库] or 将数据 [导入到Excel]