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 中,再使用常规方法写入数据库的主要内容,如果未能解决你的问题,请参考以下文章

excel格式文件怎么导入至mdb文件?

请问datatable能不能直接导入excel中??

asp.NET 中把Excel文件导入到 Oracle 数据库中怎么做,请大家帮助

如何快速的将 DataTable 导入到 Excel 中 ?

解决从Excel导入数据库,导入到DataTable时数据类型发生变化的问题(如数字类型变成科学计数法,百分数变成小数)

winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中