ASP.NET实现excel导入数据库

ASP.NET实现excel导入数据库
原创Mr_周先生 最后发布于2018-03-27 18:56:02 
展开
1:说明:此方法建立在已经实现数据库的插入功能上

2:注解:2.1:新建一个文件夹存放excel文件(见example.aspx.cs的GetExcel()方法)

               2.2:控件

                

               2.3:excel表格式(excel表头与数据库表字段对应)

               

                2.4:修改数据库插入方法(见example.aspx.cs的InsetData()方法)

3:步骤:1:前台控件:

                  1.1:FileUpload;

                  1.2:Button;

              2:后台响应程序

                  2.1:将excel上传到服务器;

                  2.2:Excel数据导入System.Data.DataTable;

                  2.3:从System.Data.DataTable导入数据到数据库

4:代码:

4.1:example.aspx
<div style="margin-top: 0px; margin-left: 0px;">
<div style="height: 38px">
<asp:Label ID="Label1" runat="server" Text="文件*:" Width="60px"></asp:Label>
<asp:FileUpload ID="fulImport" runat="server" Height="20px" Width="450px" />
<asp:Button ID="btnImport" runat="server" Text="一键上传" Width="80px" Height="20px" OnClick="btnImport_Click" />
</div>
4.2:example.aspx.cs
//上传excel数据到数据库------------------------------------------>
protected void btnImport_Click(object sender, EventArgs e) {
//1:将excel上传到服务器;
string fileUrl = this.GetExcel();
//2:将excel数据导入数据库
this.InsetData(this.GetExcelDatatable(fileUrl));
}
//1:客户端上传excel到服务器
//@return:fileUrl 服务器文件路径
protected string GetExcel(){
string fileUrl = "";
#region 文件上传
try
{
//全名
string excelFile = this.fulImport.PostedFile.FileName;
//获取文件名(不包括扩展名)
string fileName = Path.GetFileNameWithoutExtension(fulImport.PostedFile.FileName);
//扩展名
string extentionName = excelFile.Substring(excelFile.LastIndexOf(".") + 1);
if (fileName == "" || fileName == null)
{
Response.Write("<script>alert('请先选择Excel文件!')</script>");
return null;
}
if (extentionName != "xls" && extentionName != "xlsx")
{
Response.Write("<script>alert('您上传的不是Excel文件!')</script>");
return null;
}
//浏览器安全性限制 无法直接获取客户端文件的真实路径,将文件上传到服务器端 然后获取文件源路径
#region 设置上传路径将文件保存到服务器
string dateTime = DateTime.Now.Date.ToString("yyyyMMdd");
string time = DateTime.Now.ToShortTimeString().Replace(":", "");
string newFileName = dateTime + time + DateTime.Now.Millisecond.ToString() + ".xls"; ;
//自己创建的文件夹 位置随意 合理即可
fileUrl = Server.MapPath("..\excel") + "\" + newFileName;
this.fulImport.PostedFile.SaveAs(fileUrl);
//Response.Write("<script>alert('已经上传到服务器文件夹')</script>");
return fileUrl;
#endregion

}
catch
{
Response.Write("<script>alert('数据上传失败,请重新导入')</script>");
return null;
}
#endregion

}
//2:Excel数据导入Datable
//@param fileUrl 服务器文件路径
//@return System.Data.DataTable dt
protected System.Data.DataTable GetExcelDatatable(string fileUrl)
{
//office2007之前 仅支持.xls
//const string cmdText = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1';";
//支持.xls和.xlsx,即包括office2010等版本的 HDR=Yes代表第一行是标题,不是数据;
const string cmdText = "Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";

System.Data.DataTable dt = null;
//建立连接
OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl));

//打开连接
if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
{
conn.Open();
}


System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

//获取Excel的第一个Sheet名称
string sheetName = schemaTable.Rows[0]["TABLE_NAME"].ToString().Trim();

//查询sheet中的数据
string strSql = "select * from [" + sheetName + "]";
OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
dt = ds.Tables[0];

return dt;


}
//3:从System.Data.DataTable导入数据到数据库
//@param System.Data.DataTable dt
protected void InsetData(System.Data.DataTable dt)
{
int i = 0;
string MATER_ID = "";
string MATER_NAME = "";
string MATER_COUNT = "";
string MATER_SPEC = "";
string MATER_COMPANY = "";
string MATER_TIME = "";
foreach (DataRow dr in dt.Rows)
{
                //此处遍历获取excel的数据
                MATER_ID = dr[0].ToString().Trim();
MATER_NAME = dr[1].ToString().Trim();
MATER_COUNT = dr[2].ToString().Trim();
MATER_SPEC = dr[3].ToString().Trim();
MATER_COMPANY = dr[4].ToString().Trim();
MATER_TIME = dr[5].ToString().Trim();
                //此处执行你的数据库插入语句即可
string strInsert = "insert into '你的数据库名'.'你的表名' (MATER_ID,MATER_NAME,MATER_COUNT,MATER_SPEC,MATER_COMPANY,MATER_TIME) values(" + MATER_ID + ",'" + MATER_NAME + "'," + MATER_COUNT + ",'" + MATER_SPEC + "','" + MATER_COMPANY + "',to_date('" + MATER_TIME + "','yyyy-mm-dd hh24:mi:ss'))";
int count = new BLL.Common.ComData().ExecuteNonQuery(strInsert);
if (count != 0)
{
i++;
}
else
{
Alert("导入失败,数据格式出错!!");
}
}
if (i == dt.Rows.Count)
{
Alert("导入成功:共导入" + i + "组数据!!");
}
else {
Alert("未完全导入:共导入" + i + "组数据!!");
}
Search();
}
//--------------------------------------------------------------->
————————————————
版权声明:本文为CSDN博主「Mr_周先生」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hangxing_tianxia/article/details/79716766

原文地址:https://www.cnblogs.com/ljs-13/p/12424956.html