ASP代码中如何把EXCEL数据导入到SQL SERVER数据库中?
开发思路1.先上传2.建立excel记录集3.建立sqlserver数据库记录集4.读取数据并添加到数据库中5.清空连接能否提供完整代码?yhcad@163.com...
开发思路1.先上传
2.建立excel记录集
3.建立sql server数据库记录集
4.读取数据并添加到数据库中
5.清空连接
能否提供完整代码?yhcad@163.com 展开
2.建立excel记录集
3.建立sql server数据库记录集
4.读取数据并添加到数据库中
5.清空连接
能否提供完整代码?yhcad@163.com 展开
展开全部
'定义打开Excel表格的函数
Function OpenExcel(path)
dim excel,rs,strsql
On Error Resume Next
Set rs = Server.CreateObject("ADODB.RecordSet")
Set excel = Server.CreateObject("ADODB.Connection")
excel.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & path
If Err.number<> 0 Then
Response.Write "请检查上传的Excel文件内部格式,文件无法打开,导入失败!"
Response.End
End If
strsql = "SELECT * FROM [Sheet1$]" '在这里指定工作薄名称,默认是Sheet1$
Set rs = excel.Execute(strsql)
Set OpenExcel = rs
End Function
'读取文件中的内容
Dim rsInfo
Set rsInfo = Server.CreateObject("ADODB.RecordSet")
Set rsInfo = OpenExcel("E:/a.xls") '这里的文件路径请用Server.Path来获取
'检查读取结果
If rsInfo.State<> 1 Then
Response.Write "请检查Excel文件中的工作表命名是否为Sheet1,导入失败!"
Response.End
End If
If rsInfo.EOF And rsInfo.BOF Then
Response.Write "没有找到Excel表中的数据,导入失败!"
Response.End
End If
If IsNull(rsInfo.Fields(0)) or Trim(rsInfo.Fields(0))="" Then
Response.Write "没有找到Excel表中的数据,导入失败!"
Response.End
End If
'这里指定导入数据的列数,列数少了退出
If rsInfo.Fields.Count< 7 Then
Response.Write "Excel表中的数据列数不正确,导入失败!"
Response.End
End If
'创建数据库连接
dim dbrs,conn,sql
Set conn = Server.CreateObject("ADODB.Connection")
Set dbrs = Server.CreateObject("ADODB.Recordset")
'注: G_DB_ConnectString是连接数据库的字符串,自己定义
conn.ConnectionString = G_DB_ConnectString
conn.Open '打开数据库连接
'创建临时表
sql = "IF EXISTS (SELECT * FROM sysobjects WHERE xtype='U' and name='tmp_PartRes') "
sql = sql & "BEGIN Drop table tmp_PartRes END "
sql = sql & "Create table tmp_PartRes([ID] int identity(1,1),"
sql = sql & "PartID varchar(100),Brand varchar(100),[Package] varchar(100),"
sql = sql & "BatchNo varchar(100),[Price] varchar(100),[Stock] varchar(100) default('0'),"
sql = sql & "Brief varchar(100),StockFlag int default(1),"
sql = sql & "SuperFlag int default(1),SaleFlag int default(1))"
conn.execute sql
'取表结构 注意: 只取表的结构, 不要数据, 因为我这个是刚创建的临时表, 没有数据,
'如果表中存在数据, 要注意加上条件句, 防止取到数据 如: where ID = -1
sql = "SELECT * FROM tmp_PartRes"
dbrs.CursorLocation = 3 '这一定要设置为3
dbrs.Open sql,conn, 3, 4 '这里的参数必须是3和4
'取到表结构后, 必须要把活动连接及数据库连接关闭,这个很重要, 否则导入速度特慢.
Set dbrs.ActiveConnection = Nothing
conn.close
'提取Excel中的数据, 将excel中的数据放入到数据库表中.
While Not rsInfo.EOF
If Trim(rsInfo.Fields(0))<> "" Then
dbrs.AddNew
dbrs("PartID") = Ucase(Trim(rsInfo.Fields(0)))
dbrs("Brand") = Trim(rsInfo.Fields(1))
dbrs("Package") = Trim(rsInfo.Fields(2))
dbrs("BatchNo") = Trim(rsInfo.Fields(3))
dbrs("Price") = Trim(rsInfo.Fields(4))
If Trim(rsInfo.Fields(5))<>"" Then
dbrs("Stock") = Trim(rsInfo.Fields(5))
Else
dbrs("Stock") = "0"
End If
dbrs("Brief") = Trim(rsInfo.Fields(6))
End If
rsInfo.MoveNext
Wend
'更新记录集到数据库临时表
conn.Open '打开连接
dbrs.ActiveConnection = conn
dbrs.UpdateBatch '批量更新函数
'更新完成后, 关闭连接
dbrs.Close
Set dbrs = Nothing
rsInfo.Close
Set rsInfo = Nothing
Function OpenExcel(path)
dim excel,rs,strsql
On Error Resume Next
Set rs = Server.CreateObject("ADODB.RecordSet")
Set excel = Server.CreateObject("ADODB.Connection")
excel.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & path
If Err.number<> 0 Then
Response.Write "请检查上传的Excel文件内部格式,文件无法打开,导入失败!"
Response.End
End If
strsql = "SELECT * FROM [Sheet1$]" '在这里指定工作薄名称,默认是Sheet1$
Set rs = excel.Execute(strsql)
Set OpenExcel = rs
End Function
'读取文件中的内容
Dim rsInfo
Set rsInfo = Server.CreateObject("ADODB.RecordSet")
Set rsInfo = OpenExcel("E:/a.xls") '这里的文件路径请用Server.Path来获取
'检查读取结果
If rsInfo.State<> 1 Then
Response.Write "请检查Excel文件中的工作表命名是否为Sheet1,导入失败!"
Response.End
End If
If rsInfo.EOF And rsInfo.BOF Then
Response.Write "没有找到Excel表中的数据,导入失败!"
Response.End
End If
If IsNull(rsInfo.Fields(0)) or Trim(rsInfo.Fields(0))="" Then
Response.Write "没有找到Excel表中的数据,导入失败!"
Response.End
End If
'这里指定导入数据的列数,列数少了退出
If rsInfo.Fields.Count< 7 Then
Response.Write "Excel表中的数据列数不正确,导入失败!"
Response.End
End If
'创建数据库连接
dim dbrs,conn,sql
Set conn = Server.CreateObject("ADODB.Connection")
Set dbrs = Server.CreateObject("ADODB.Recordset")
'注: G_DB_ConnectString是连接数据库的字符串,自己定义
conn.ConnectionString = G_DB_ConnectString
conn.Open '打开数据库连接
'创建临时表
sql = "IF EXISTS (SELECT * FROM sysobjects WHERE xtype='U' and name='tmp_PartRes') "
sql = sql & "BEGIN Drop table tmp_PartRes END "
sql = sql & "Create table tmp_PartRes([ID] int identity(1,1),"
sql = sql & "PartID varchar(100),Brand varchar(100),[Package] varchar(100),"
sql = sql & "BatchNo varchar(100),[Price] varchar(100),[Stock] varchar(100) default('0'),"
sql = sql & "Brief varchar(100),StockFlag int default(1),"
sql = sql & "SuperFlag int default(1),SaleFlag int default(1))"
conn.execute sql
'取表结构 注意: 只取表的结构, 不要数据, 因为我这个是刚创建的临时表, 没有数据,
'如果表中存在数据, 要注意加上条件句, 防止取到数据 如: where ID = -1
sql = "SELECT * FROM tmp_PartRes"
dbrs.CursorLocation = 3 '这一定要设置为3
dbrs.Open sql,conn, 3, 4 '这里的参数必须是3和4
'取到表结构后, 必须要把活动连接及数据库连接关闭,这个很重要, 否则导入速度特慢.
Set dbrs.ActiveConnection = Nothing
conn.close
'提取Excel中的数据, 将excel中的数据放入到数据库表中.
While Not rsInfo.EOF
If Trim(rsInfo.Fields(0))<> "" Then
dbrs.AddNew
dbrs("PartID") = Ucase(Trim(rsInfo.Fields(0)))
dbrs("Brand") = Trim(rsInfo.Fields(1))
dbrs("Package") = Trim(rsInfo.Fields(2))
dbrs("BatchNo") = Trim(rsInfo.Fields(3))
dbrs("Price") = Trim(rsInfo.Fields(4))
If Trim(rsInfo.Fields(5))<>"" Then
dbrs("Stock") = Trim(rsInfo.Fields(5))
Else
dbrs("Stock") = "0"
End If
dbrs("Brief") = Trim(rsInfo.Fields(6))
End If
rsInfo.MoveNext
Wend
'更新记录集到数据库临时表
conn.Open '打开连接
dbrs.ActiveConnection = conn
dbrs.UpdateBatch '批量更新函数
'更新完成后, 关闭连接
dbrs.Close
Set dbrs = Nothing
rsInfo.Close
Set rsInfo = Nothing
展开全部
没分啊,给你一点代码看看吧,
excel也是一种数据库,小型数据库而以,只不过是链接字符串跟其它数据库不同而以,打开完数据库以后,就跟操作asscess,mssql数据库的表一样了
call OpenExcel(1)
sql="Select Top 1 * From ["&sheetName&"$]" '这里是excel的表名,一定要在后面加上$
Set rs=Server.CreateObject("Adodb.RecordSet")
rs.Open sql,exlConn,1,1
NoFields:1 表示excel第一行是表头,0表示无表头
Sub OpenExcel(NoFields)
On Error Resume Next
Dim errMsg
If NoFields=1 Then NoFields="YES" Else NoFields="NO"
exlConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR="&NoFields&";IMEX=1';Data Source="&FilePath
Set exlConn = Server.CreateObject("ADODB.Connection")
exlConn.open exlConnStr
If Err.Number <> 0 then
errMsg="<br>读取Excel文件出错<br>"&Err.Source &"<br>"&Err.Description&"<br>"
End If
End Sub
excel也是一种数据库,小型数据库而以,只不过是链接字符串跟其它数据库不同而以,打开完数据库以后,就跟操作asscess,mssql数据库的表一样了
call OpenExcel(1)
sql="Select Top 1 * From ["&sheetName&"$]" '这里是excel的表名,一定要在后面加上$
Set rs=Server.CreateObject("Adodb.RecordSet")
rs.Open sql,exlConn,1,1
NoFields:1 表示excel第一行是表头,0表示无表头
Sub OpenExcel(NoFields)
On Error Resume Next
Dim errMsg
If NoFields=1 Then NoFields="YES" Else NoFields="NO"
exlConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR="&NoFields&";IMEX=1';Data Source="&FilePath
Set exlConn = Server.CreateObject("ADODB.Connection")
exlConn.open exlConnStr
If Err.Number <> 0 then
errMsg="<br>读取Excel文件出错<br>"&Err.Source &"<br>"&Err.Description&"<br>"
End If
End Sub
追问
能否提供完整的代码?
追答
上面的就挺全的了,你还想要啥啊?
sql="Select Top 1 * From ["&sheetName&"$]" '这里是excel的表名,一定要在后面加上$
Set rs=Server.CreateObject("Adodb.RecordSet")
rs.Open sql,exlConn,1,1
while not rs.rof
在这里一条条添加到数据库
rs.movenext
wend
还有别一种方法,用ms sql直接读取【OPENDATASOURCE】,下面是我自己网站导数据的代码
sql="INSERT INTO IcNew (UserID,ClassID,SuppID,Hits,IsCheck,AddDate,Model,Supplier,DateCode,Pack,Quantity,Price,GiveTime,Memo) "
sql=sql&"Select "&UserID&","&ClassID&",0,0,"&IsCheck&",'"&StartTime&"',F1,F2,F3,F4,F5,F6,F7,F8 From OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=NO;IMEX=1;DATABASE="&FilePath&"')...["&SheetName(i)&"] Where (F1'型号' And Len(F1)'') And Len(ISNULL(F2,''))<51 And Len(ISNULL(F3,''))<51 And Len(ISNULL(F4,''))<51"
我再发个代码到你邮箱吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同意aliang888的答案,不过他的答案没有提供连接字符串和连接代码。LZ请自己百度一下。你都没有发分出来,我也懒得帮你找。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接用数据库的导入功能了,为什么还要用EXCEL呢.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询