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文件

时间: 2024-10-25 09:00:39

Excel 导入到Datatable 中,再使用常规方法写入数据库的相关文章

读取指定路径的Excel内容到DataTable中

1 /// <summary> 2 /// 读取指定路径的Excel内容到DataTable中 3 /// </summary> 4 /// <param name="path"></param> 5 /// <returns></returns> 6 public DataTable ImportToDataSet(string path) 7 { 8 string strConn = "Provide

使用SqlBulkCopy将DataTable中的数据批量插入数据库中

#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致. /// </summary> /// <param name="conStr">数据库连接串</param> /// <param name="strTableName">数据库中对应的表名</param> //

批量插入数据, 将DataTable里的数据批量写入数据库的方法

大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server:   使用SqlBulkCopy 2. MySql: adapter.update()批量更新 MySqlBulkLoader, 这个是从文件里边到的, 有个实现是先将DATATable编程CSV文件, 在用MySqlBulkLoader导入MySql 参考文章: http://theonetechnologies.com/outsourcing/

C# 之 Excel 导入一列中既有汉字又有数字:数字可以正常导入,汉字导入为空

今天在做一个Excel导入功能,一切开发就绪,数据可以成功导入.导入后检查数据库发现有一列既有汉字又有数字,数字正常导入,汉字为空.但是前面同样既有汉字又有数字的列可以导入成功. 查看excel 源文件,如下图: 仔细观察两列略有不同,前两列的数字单元格左上角有个绿色三角形,选中单元格,左边有一个信息显示“ 次单元格中的数字为文本形式,或者前面有撇号. ”,也就是 “ 以文本形式存储的数字 ”. 然后尝试选中内容列,右键设置单元格格式为“ 文本 ”,修改后如下图: 再次导入仍然失败,单元格左上角

使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法

Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中. 1.问题背景 使用Sqoop把oracle数据库中的一张表,这里假定为student,当中的数据导入到hdfs中,然后再创建hive的external表,location到刚才保存到hdfs中数

C#读取excel数据到datatable中

1 DataTable dtGBPatient = new DataTable(); 2 3 string strConn;string excelName; 4 5 //注意:把一个excel文件看做一个数据库,一个sheet看做一张表.语法 "SELECT * FROM [sheet1$]",表单要使用"[]"和"$" 6 7 // 1.HDR表示要把第一行作为数据还是作为列名,作为数据用HDR=no,作为列名用HDR=yes: 8 // 2

Python将excel导入到mysql中

分享一段前一段时间写的python代码 # encoding: utf-8 # !/usr/bin/python import sys import types import datetime import MySQLdb import xlrd from PyQt4 import QtGui class MainWindow(QtGui.QDialog): def __init__(self, parent=None): QtGui.QDialog.__init__(self) self.re

将Excel导入到数据中

常用的方式的有两种: 1. 通过 Microsoft.Jet.OLEDB.4.0 或  Microsoft.ACE.OLEDB.12.0 Microsoft.ACE.OLEDB.12.0 需要安装 AccessDatatbaseEngine http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe public DataTable Excel

导入本地文本中的数据到MySQL数据库中

文本文件中的字段是用","分隔的,如: 3144242807,Wed Oct 16 22:44:28 CST 2013,30.536041,114.3680192443892271,Mon Apr 28 09:21:39 CST 2014,30.545344,114.365762122771615,Fri Sep 06 14:00:32 CST 2013,30.538091,114.3706052495361967,Wed Apr 30 07:20:53 CST 2014,30.516