rt,簡單的excel導入mssql。未做性能及海量數據優化,一般單表5000左右條數據導入適用。
源碼非原創,來源于之前搜集整理,原作者無從考究,如有版權問題請留言注明。
看代碼。前臺頁面是一個FileUpload和button
protected
void
Button1_Click(
object
sender, EventArgs e)
{
if
(FileUpload1.HasFile ==
false
)
//
HasFile用來檢查FileUpload是否有指定文件
{
Response.Write(
"
<script>alert('請您選擇Excel文件')</script>
"
);
return
;
//
當無文件時,返回
}
string
IsXls = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();
//
System.IO.Path.GetExtension獲得文件的擴展名
if
(IsXls !=
"
.xls
"
)
{
if
(IsXls !=
"
.xlsx
"
)
{
Response.Write(
"
<script>alert('只可以選擇Excel文件')</script>
"
);
return
;
//
當選擇的不是Excel文件時,返回
}
}
string
filename = FileUpload1.FileName;
//
獲取Execle文件名 DateTime日期函數
string
savePath = Server.MapPath((
"
upfiles\\
"
) + filename);
//
Server.MapPath 獲得虛擬服務器相對路徑
FileUpload1.SaveAs(savePath);
//
SaveAs 將上傳的文件內容保存在服務器上
DataSet ds = ExcelSqlConnection(savePath, filename, IsXls);
//
調用自定義方法
DataRow[] dr = ds.Tables[
0
].Select();
//
定義一個DataRow數組
int
rowsnum = ds.Tables[
0
].Rows.Count;
if
(rowsnum ==
0
)
{
Response.Write(
"
<script>alert('Excel表為空表,無數據!')</script>
"
);
//
當Excel表為空時,對用戶進行提示
}
else
{
for
(
int
i =
0
; i < dr.Length; i++
)
{
//
前面除了你需要在建立一個“upfiles”的文件夾外,其他的都不用管了,你只需要通過下面的方式獲取Excel的值,然后再將這些值用你的方式去插入到數據庫里面
//
string title = dr[i]["產品名稱"].ToString();
//
string linkurl = dr[i]["產品高度"].ToString();
//
string categoryname = dr[i]["產品寬度"].ToString();
if
(i==
1
)
{
Response.Write(
"
<script>alert('!');</script>
"
);
}
string
sql =
"
INSERT INTO [Products]([Pname],[Pheight],[Pweight])VALUES('
"
+ dr[i][
"
產品名稱
"
].ToString() +
"
','
"
+ dr[i][
"
產品寬度
"
].ToString() +
"
','
"
+ dr[i][
"
產品寬度
"
].ToString()
+
"
')
"
;
SQLHelper.ExcuteCommand(sql);
//
Response.Write("<script>alert('導入內容:" + ex.Message + "')</script>");
}
//
```Response.Write("<script>alert('Excle表導入成功!');</script>");
}
}
#region
連接Excel 讀取Excel數據 并返回DataSet數據集合
///
<summary>
///
連接Excel 讀取Excel數據 并返回DataSet數據集合
///
</summary>
///
<param name="filepath">
Excel服務器路徑
</param>
///
<param name="tableName">
Excel表名稱
</param>
///
<returns></returns>
public
static
System.Data.DataSet ExcelSqlConnection(
string
filepath,
string
tableName,
string
IsXls)
{
string
strCon =
""
;
if
(IsXls ==
"
.xls
"
)
{
strCon
=
"
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
"
+ filepath +
"
;Extended Properties='Excel 8.0;HDR=YES;IMEX=1'
"
;
}
else
{
strCon
=
"
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=
"
+ filepath +
"
;Extended Properties='Excel 12.0;HDR=YES;IMEX=1'
"
;
}
OleDbConnection ExcelConn
=
new
OleDbConnection(strCon);
try
{
string
strCom =
string
.Format(
"
SELECT * FROM [Sheet1$]
"
);
ExcelConn.Open();
OleDbDataAdapter myCommand
=
new
OleDbDataAdapter(strCom, ExcelConn);
DataSet ds
=
new
DataSet();
myCommand.Fill(ds,
"
[
"
+ tableName +
"
$]
"
);
ExcelConn.Close();
return
ds;
}
catch
{
ExcelConn.Close();
return
null
;
}
}
#endregion
希望對日常開發中有所幫助。對海量級、多表導入需求的可在此基礎上自行修改,歡迎共享這部分的優化代碼。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

