asp.net C# 实现上传Excel文件导入数据到SQL Server 数据库
生活随笔
收集整理的這篇文章主要介紹了
asp.net C# 实现上传Excel文件导入数据到SQL Server 数据库
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前臺代碼,有點簡單:
<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="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=2018.9.17/// </summary>/// <param name="fileUrl">文件的完整路徑(包括擴展名)</param>/// <returns>DataTabl</returns>public static DataTable GetExcelDatatable(string fileUrl){//支持.xls和.xlsx,即包括office2010等版本的 HDR=Yes代表第一行是標(biāo)題,不是數(shù)據(jù);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=2018.9.17/// </summary>/// <param name="savePath">文件的完整路徑(包括擴展名)</param>/// <param name="destinationTableName">目標(biāo)數(shù)據(jù)庫表名</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 該鏈接在最后會自動關(guān)閉{ds = GetExcelDatatable(savePath); //調(diào)用自定義方法//bcp.BatchSize = 100;//每次傳輸?shù)男袛?shù) //bcp.NotifyAfter = 100;//進度提示的行數(shù) // bcp.DestinationTableName = "Tb";//需要導(dǎo)入的數(shù)據(jù)庫表名bcp.DestinationTableName = destinationTableName; //需要導(dǎo)入的數(shù)據(jù)庫表名try{//excel表頭與數(shù)據(jù)庫列對應(yīng)關(guān)系 for (int i = 0; i < ds.Columns.Count; ++i){//string s = ds.Columns[i].ColumnName;bcp.ColumnMappings.Add(ds.Columns[i].ColumnName, sqlTableName[i]); // 設(shè)置cxcel表中列名與數(shù)據(jù)庫中表列名的映射關(guān)系 sqlTableName[i]中存的時數(shù)據(jù)庫表中的各個字段}bcp.WriteToServer(ds);return true;//Response.Write("<script>alert('Excle表導(dǎo)入成功!')</script>"); //不能成功導(dǎo)入時,對用戶進行提示}catch (Exception ex){Console.WriteLine(ex.Message);return false;//Response.Write("<script>alert('Excle表導(dǎo)入失敗!');</script>");}}}/// <summary>/// time=2018.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;//當(dāng)無文件時,返回}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;//當(dāng)選擇的不是Excel文件時,返回}string filename = FileUpload1.FileName; //獲取Execle文件名 DateTime日期函數(shù)string savePath = Server.MapPath(("uploadfiles\\") + filename);//Server.MapPath 獲得虛擬服務(wù)器相對路徑Response.Write(savePath);//savePath ="E:\\Visual Studio 2013 Workspace\\fileUpLoad\\fileUpLoad\\uploadfiles\\201842314025658.xls"DataTable ds = new DataTable();FileUpload1.SaveAs(savePath); //SaveAs 將上傳的文件內(nèi)容保存在服務(wù)器上 文件可以成功保存bool ok = SqlBulkCopyToDB(savePath, "Tb"); // 用SqlBulkCopy 將表中數(shù)據(jù)插入數(shù)據(jù)庫 “Tb”為要插入數(shù)據(jù)庫的表名if (ok){Response.Write("<script>alert('Excle表導(dǎo)入成功!')</script>"); //不能成功導(dǎo)入時,對用戶進行提示}else{Response.Write("<script>alert('Excle表導(dǎo)入失敗!');</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>?
總結(jié)
以上是生活随笔為你收集整理的asp.net C# 实现上传Excel文件导入数据到SQL Server 数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Maven Assembly Plugi
- 下一篇: 如何不用鼠标操作电脑