1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > asp.net C# 实现上传Excel文件导入数据到SQL Server 数据库

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

时间:2021-01-05 03:31:02

相关推荐

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

前台代码,有点简单:

<html xmlns="/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="FileUpload1" runat="server" /><asp:Button ID="Button1" runat="server" Text="确定上传" onclick="Button1_Click" /></div></form></body></html>

后台完整代码:

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{/// <summary>/// time=.9.17/// </summary>/// <param name="fileUrl">文件的完整路径(包括扩展名)</param>/// <returns>DataTabl</returns>public static DataTable GetExcelDatatable(string fileUrl){//支持.xls和.xlsx,即包括office等版本的 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$]"; //这里指定表明为Sheet1OleDbDataAdapter 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();}}/// <summary>/// time=.9.17/// </summary>/// <param name="savePath">文件的完整路径(包括扩展名)</param>/// <param name="destinationTableName">目标数据库表名</param>/// <returns>如果成功插入,返回true</returns>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("<script>alert('Excle表导入成功!')</script>"); //不能成功导入时,对用户进行提示}catch (Exception ex){Console.WriteLine(ex.Message);return false;//Response.Write("<script>alert('Excle表导入失败!');</script>");}}}/// <summary>/// time=.9.17/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void Button1_Click(object sender, EventArgs e){if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件{Response.Write("<script>alert('请您选择Excel文件')</script> ");return;//当无文件时,返回}string IsXls = Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名if (IsXls != ".xlsx" && IsXls != ".xls"){Response.Write(FileUpload1.FileName);Response.Write("<script>alert('只可以选择Excel文件')</script>");return;//当选择的不是Excel文件时,返回}string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数string savePath = Server.MapPath(("uploadfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径Response.Write(savePath);//savePath ="E:\\Visual Studio Workspace\\fileUpLoad\\fileUpLoad\\uploadfiles\\42314025658.xls"DataTable ds = new DataTable();FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上 文件可以成功保存bool ok = SqlBulkCopyToDB(savePath, "Tb"); // 用SqlBulkCopy 将表中数据插入数据库 “Tb”为要插入数据库的表名if (ok){Response.Write("<script>alert('Excle表导入成功!')</script>"); //不能成功导入时,对用户进行提示}else{Response.Write("<script>alert('Excle表导入失败!');</script>");}}}}

配置文件:

<connectionStrings><add name="connString" connectionString="Server=.;DataBase=test;uid=sa;pwd=123"/></connectionStrings><appSettings><add key ="conStr" value="Server=.;User Id=sa; pwd=123;database=test"/></appSettings>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。