Excel 导入到Datatable 中,再使用常规方法写入数据库
Posted 码蚁的堡垒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel 导入到Datatable 中,再使用常规方法写入数据库相关的知识,希望对你有一定的参考价值。
首先呢?要看你的电脑的office版本,我的是office 2013 .为了使用oledb程序,需要安装一个引擎。名字为AccessDatabaseEngine.exe。这里不过多介绍了哦。它的数据库连接字符串是"Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties=\'Excel 12.0; HDR=Yes; IMEX=1\'"
所以,我们是使用ole来读取excel的。
1 excel 的文件内容:
2 测试的页面设计图
3 webconfig里设置数据库相关字符串
4 测试页面的代码:
简单的布局,主要看功能:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ExcelTodatabase.aspx.cs" Inherits="ExcelToDatabase.ExcelTodatabase" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:FileUpload ID="Excelfile" runat="server" /> <asp:Button ID="btnFileUp" runat="server" Text="提交" OnClick="btnFileUp_Click" /> <br /> <br /> <br /> <asp:GridView ID="gvExcel" runat="server"> </asp:GridView> <br /> <br /> <asp:Label ID="debug" runat="server" Text="Label"></asp:Label> <br /> </div> </form> </body> </html>
5 主要功能:
5.1 导入文件
5.2 将excel导入datatable
5.3 将datatable 写入数据库
完整的代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; using System.Data.OleDb; using System.IO; using System.Configuration; namespace ExcelToDatabase { public partial class ExcelTodatabase : System.Web.UI.Page { // 连接字符串 private static string connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; protected void Page_Load(object sender, EventArgs e) { } protected void btnFileUp_Click(object sender, EventArgs e) { if (Excelfile.HasFile) { //检查文件扩展名 string filename = Path.GetFileName(Excelfile.PostedFile.FileName); //debug.Text = filename; string extension = Path.GetExtension(Excelfile.PostedFile.FileName); //debug.Text = extension; if (extension != ".xlsx") { Response.Write("<script>alert(\'抱歉!您上传的不是有效的Excel文件\')</script>"); } else { //首先保存到服务器上 string newFileName = "excel"+DateTime.Now.ToString("yyyyMMddHHmmssfff"); string savePath = "ExcelFiles/"+newFileName; Excelfile.PostedFile.SaveAs(Server.MapPath(savePath)+extension); //debug.Text = Server.MapPath(savePath) + extension; //这里可以导入数据了 string fileUrl = Server.MapPath(savePath) + extension; DataTable dt = GetExcel(fileUrl); gvExcel.DataSource = dt; gvExcel.DataBind(); //写入数据库 bool addToDb = InsertDb(dt); if (addToDb) { Response.Write("<script>alert(\'写入数据库成功\')</script>"); } else { Response.Write("<script>alert(\'抱歉!写入失败\')</script>"); } } } else { Response.Write("<script>alert(\'抱歉!您还没上传文件\')</script>"); } } /// <summary> /// 根据文件名来导入excel到datatable /// </summary> /// <param name="fileUrl"></param> /// <returns></returns> public DataTable GetExcel(string fileUrl) { const string cmdText = "Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties=\'Excel 12.0; HDR=Yes; IMEX=1\'"; DataTable dt = null; OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl)); try { //打开连接 if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed) { conn.Open(); } DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //获取Excel的第一个Sheet名称 string sheetName = schemaTable.Rows[0]["TABLE_NAME"].ToString().Trim(); //查询sheet中的数据 string strSql = "SELECT * FROM [" + sheetName + "]";//sql语句,可以修改 OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; return dt; } catch (Exception) { throw; } } public bool InsertDb(DataTable dt) { int result=0; //1 首先是要 定义好字段 string name = ""; string money = ""; //遍历存在的表格 foreach (DataRow dr in dt.Rows) { name = dr["name"].ToString().Trim(); money = dr["money"].ToString().Trim(); string sql = String.Format("insert into test(name,money)values(\'{0}\',\'{1}\')",name,money);//sql语句,测试用的 using (SqlConnection conn=new SqlConnection(connString)) { conn.Open(); SqlCommand cmd = new SqlCommand(sql,conn); result = cmd.ExecuteNonQuery(); } } if (result>0) { return true; } else { return false; } } } }
实际运行的页面
数据库中内容:
简单的过程就是这样了。。
难度在于几个错误
1 未在本机计算机注册.............解决:看开头介绍的
2 其他的一些错误暂且未发现与程序相关的。可以自行解决。
完整项目下载地址:http://files.cnblogs.com/files/fanling521/ExcelToDatabase.rar
包含了excel文件
以上是关于Excel 导入到Datatable 中,再使用常规方法写入数据库的主要内容,如果未能解决你的问题,请参考以下文章
asp.NET 中把Excel文件导入到 Oracle 数据库中怎么做,请大家帮助
如何快速的将 DataTable 导入到 Excel 中 ?
解决从Excel导入数据库,导入到DataTable时数据类型发生变化的问题(如数字类型变成科学计数法,百分数变成小数)