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
希望对日常开发中有所帮助。对海量级、多表导入需求的可在此基础上自行修改,欢迎共享这部分的优化代码。

