前臺代碼,有點簡單:
<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代表第一行是標題,不是數據;
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();
}
}
/// <summary>
/// time=2018.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=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;//當無文件時,返回
}
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 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("<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>