asp.net C# 实现上传Excel文件导入数据到SQL Server 数据库

前台代码,有点简单:





    


    

后台完整代码:


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.OleDb;
using System.IO;
using System.Data.SqlClient;
using System.Configuration;

namespace fileUpLoad
{
    public partial class Index : System.Web.UI.Page
    {
        /// 
        /// time=2018.9.17
        /// 
        /// 文件的完整路径(包括扩展名)
        /// DataTabl
         public static DataTable GetExcelDatatable(string fileUrl)
        {
            //支持.xls和.xlsx,即包括office2010等版本的   HDR=Yes代表第一行是标题,不是数据;
            string cmdText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+fileUrl+";  Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
            System.Data.DataTable dt = null;
            //建立连接
            OleDbConnection conn = new OleDbConnection(cmdText);
            try
            {
                //打开连接
                if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                    //if (conn.State == System.Data.ConnectionState.Open) {  //测试用的
                     //   Response.Write("文件链接成功!");
                    //}
                }

                System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string strSql = "select * from [Sheet1$]";   //这里指定表明为Sheet1
                OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
                DataSet ds = new DataSet();
                da.Fill(ds);
                dt = ds.Tables[0];;
                return dt;
            }
            catch (Exception exc)
            {
                throw exc;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }
        /// 
         /// time=2018.9.17
        /// 
        /// 文件的完整路径(包括扩展名)
        /// 目标数据库表名
        /// 如果成功插入,返回true
         public static bool SqlBulkCopyToDB(string savePath, string destinationTableName)
        {
            DataTable ds = new DataTable(); 
            string connectionString = ConfigurationManager.ConnectionStrings["connString"].ConnectionString;
            using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))// 使用using 该链接在最后会自动关闭
            {

                ds = GetExcelDatatable(savePath);           //调用自定义方法
                //bcp.BatchSize = 100;//每次传输的行数 
                //bcp.NotifyAfter = 100;//进度提示的行数 
               // bcp.DestinationTableName = "Tb";//需要导入的数据库表名
                bcp.DestinationTableName = destinationTableName; //需要导入的数据库表名
                try
                {
                    //excel表头与数据库列对应关系 
                    for (int i = 0; i < ds.Columns.Count; ++i)
                    {
                        //string s = ds.Columns[i].ColumnName;
                        bcp.ColumnMappings.Add(ds.Columns[i].ColumnName, sqlTableName[i]);   // 设置cxcel表中列名与数据库中表列名的映射关系  sqlTableName[i]中存的时数据库表中的各个字段
                        
                    }
                    bcp.WriteToServer(ds);
                    return true;
                    //Response.Write("");   //不能成功导入时,对用户进行提示
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return false;
                    //Response.Write("");
                }
            }
        }
        /// 
        /// time=2018.9.17
        /// 
        /// 
        /// 
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
            {
                Response.Write(" ");
                return;//当无文件时,返回
            }
            string IsXls = Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
            if (IsXls != ".xlsx" && IsXls != ".xls")
            {
                Response.Write(FileUpload1.FileName);
                Response.Write("");
                return;//当选择的不是Excel文件时,返回
            }
            string filename = FileUpload1.FileName;              //获取Execle文件名  DateTime日期函数
            string savePath = Server.MapPath(("uploadfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
            Response.Write(savePath);
            //savePath ="E:\\Visual Studio 2013 Workspace\\fileUpLoad\\fileUpLoad\\uploadfiles\\201842314025658.xls"
            DataTable ds = new DataTable();
            FileUpload1.SaveAs(savePath);                        //SaveAs 将上传的文件内容保存在服务器上   文件可以成功保存
            bool ok = SqlBulkCopyToDB(savePath, "Tb");   //  用SqlBulkCopy 将表中数据插入数据库  “Tb”为要插入数据库的表名
            if (ok)
            {
                Response.Write("");   //不能成功导入时,对用户进行提示
            }
            else
            {
                Response.Write("");
            }
        }
    }
}

配置文件:


    
  
  
    
  

 

你可能感兴趣的:(C#,asp.net)