天天看點

ASP實作 将Excel表格資料批量導入到SQLServer資料庫

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

繼續閱讀