zoukankan
html css js c++ java
EXCEL导入GridView,然后再汇入数据库.
近日项目中有一个多笔料号要输入,我做了一个用javascript复制输入框的功能,可以输入多笔料号。
但是使用者反馈,料号太多,可能几百个料号在EXCEL文件里,这样输入很慢,需要增加功能。于是想到了SQLSERVER导入EXCEL的功能。
declare
@strExcelName
varchar
(
50
)
set
@strExcelName
=
'
c:\sl.xls
'
exec
(
'
select * into ##tmp from openrowset(
''
MICROSOFT.JET.OLEDB.4.0
''
,
''
Excel 8.0;HDR=No;IMEX=1;DATABASE=
'
+
@strExcelName
+
'''
,[Sheet1$])
'
)
select
*
from
##tmp
这样是可以导入数据,但是问题来了。我的数据库服务器和运行程序服务器不在同一服务器,无法导入(可能有方法,但是项目紧,没时间去探索),于是想到另外一个方法:先上传EXCEL文件,然后读入DATASET放入
GridView
,然后从
GridView
提交到数据库,这样就没有问题。
文件上传控件:
<
input
id
="myFile"
runat
="server"
type
="file"
/>
Form里不需要enctype="multipart/form-data"
文件上传代码:
if
(myFile.PostedFile.FileName
!=
""
)
{
//
上传文件的绝对路径
string
sFile
=
myFile.PostedFile.FileName;
//
获取文件全名
sFile
=
sFile.Substring(sFile.LastIndexOf(
"
\\
"
)
+
1
);
//
获取后缀名
sFile
=
sFile.Substring(sFile.LastIndexOf(
"
.
"
));
if
(sFile.ToLower()
!=
"
.xls
"
)
{
Response.Write(
"
请选择Excel文件!
"
);
Response.End();
}
//
为了防止重名,获得日期为文件名年月日时分秒毫秒
string
datatime
=
System.DateTime.Now.ToString(
"
yyyMMddHHmmssffff
"
);
//
上传后文件的新名
sFile
=
datatime
+
sFile;
//
AppDomain.CurrentDomain.BaseDirectory.ToString() 获取此项目的根目录
//
sPath 获取上传后的路径
string
sPath
=
AppDomain.CurrentDomain.BaseDirectory.ToString()
+
"
ExcelFiles\\
"
+
sFile;
//
上传文件
myFile.PostedFile.SaveAs(sPath);
this
.myGridView.DataSource
=
GetExcelContent(sPath);
this
.myGridView.DataBind();
}
读取EXCEL到DATASET代码:
private
DataSet GetExcelContent(
string
filepath)
{
string
strCon
=
"
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
"
+
filepath
+
"
;Extended Properties='Excel 8.0;HDR=No;IMEX=1'
"
;
System.Data.OleDb.OleDbConnection myConn
=
new
System.Data.OleDb.OleDbConnection(strCon);
string
strCom
=
"
SELECT F1 as resno,F2 as resname FROM [Sheet1$]
"
;
myConn.Open();
System.Data.OleDb.OleDbDataAdapter myCommand
=
new
System.Data.OleDb.OleDbDataAdapter(strCom, myConn);
//
创建一个DataSet对象
DataSet myDataSet
=
new
DataSet();
//
得到自己的DataSet对象
myCommand.Fill(myDataSet);
//
关闭此数据链接
myConn.Close();
return
myDataSet;
}
最后是数据提交到数据库代码:
string
stresno
=
""
;
string
stresname
=
""
;
foreach
(GridViewRow row
in
this
.myGridView.Rows)
{
Label txtesno
=
(Label)row.FindControl(
"
labresno
"
);
stresno
+=
txtesno.Text.ToString().Trim().Replace(
"
'
"
,
"
''
"
)
+
"
;
"
;
Label txtresname
=
(Label)row.FindControl(
"
labresname
"
);
stresname
+=
txtresname.Text.ToString().Trim().Replace(
"
'
"
,
"
''
"
)
+
"
;
"
;
}
Response.Write(stresno
+
"
<br/>
"
+
stresname);
Response.End();
查看全文
相关阅读:
作诗(si)[分块]
【洛谷 P3469】[POI2008]BLO-Blockade(割点)
【洛谷 P2464】[SDOI2008]郁闷的小J(线段树)
【BZOJ 3907】网格(Catalan数)
【洛谷 P4211】[LNOI2014]LCA(树链剖分,差分)
【洛谷 P2480】 [SDOI2010]古代猪文(中国剩余定理,Lucas定理)
【洛谷 P3842】[TJOI2007]线段(DP)
【洛谷 P2346】四子连棋(状态压缩,搜索)
【洛谷 P1363】幻想迷宫(搜索)
【洛谷 P1364】医院设置(树的重心)
原文地址:https://www.cnblogs.com/cnaspnet/p/863680.html
最新文章
Sublime Text 3 插件安装及Vim 模式设置
sublime text 3 安装注释
vmware 没挂载光盘解决方案
Linux开机自动挂载存储
P1872 回文串计数(回文树)
P2633 Count on a tree(主席树)
P2420 让我们异或吧(树链剖分)
P3649 [APIO2014]回文串(回文树)
分块入门学习笔记
[洛谷P3121] 审查(黄金) (AC自动机)
热门文章
[BJOI2018]求和(树链剖分)
[CQOI2018]异或序列
[HNOI2018]爆零记
牧草种植
[ZJOI2008]树的统计
[HAOI2015]树上操作
[NOI2015]软件包管理器
[SDOI2011]染色
[JLOI2014]松鼠的新家
[HNOI2016]网络
Copyright © 2011-2022 走看看