ASP實作 将Excel表格資料批量導入到SQLServer資料庫
說明:
1. 被導入的工作表格, 預設以Sheet1命名, 當然也可以指定為其他的, 但必須與程式中的相符.
2. 被導入的工作表中,第一列第一行必須有資料.
3. 被導入的工作表中的列數要與程式中相符.
'定義打開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
注: 原文出處: http://freshflower.iteye.com/blog/1774733