2011-12-12 71 views
1

我能夠在iis6(測試服務器)和iis7(活動服務器)上正常運行sqlbulkcopy,但是在iis7中上載數據時,行被切斷。它只在iis7中從250000進口〜190,000。在iis 6中使用相同的代碼/頁面,它會加載所有250000條記錄,而不會出現問題。兩臺服務器也在更新相同的SQL數據庫。使用ASP的Sqlbulkcopy在iis6中工作但在iis7中失敗

我已經全面搜索瞭解決方案。任何幫助深表感謝。

Sub UpdateData() 

    Dim sSQLTable As String = "Table1" 
    Dim sExcelFileName As String = savePath 
    Dim sWorkbook() As String = GetExcelSheetNames(sExcelFileName) 

    'Create our connection strings 
    Dim sExcelConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sExcelFileName & ";Extended Properties=""Excel 12.0;HDR=YES;""" 

    'Execute a query to erase any previous data from our destination table 
    Dim sClearSQL = "DELETE FROM " & sSQLTable 
    Dim SqlConn As SqlConnection = New SqlConnection(ConnString) 
    Dim SqlCmd As SqlCommand = New SqlCommand(sClearSQL, SqlConn) 
    SqlConn.Open() 
    SqlCmd.ExecuteNonQuery() 
    SqlConn.Close() 

    'Series of commands to bulk copy data from the excel file into our SQL table 
    Dim OleDbConn As OleDbConnection = New OleDbConnection(sExcelConnectionString) 
    OleDbConn.Open() 

    Dim OleDbCmd As OleDbCommand = New OleDbCommand(("SELECT * FROM [" & sWorkbook(0) & "]"), OleDbConn) 
    Dim dr As OleDbDataReader = OleDbCmd.ExecuteReader() 
    Dim bulkCopy As SqlBulkCopy = New SqlBulkCopy(ConnString, SqlBulkCopyOptions.UseInternalTransaction) 
    bulkCopy.BulkCopyTimeout = 2000 
    bulkCopy.DestinationTableName = sSQLTable 
    'DEMO bulkCopy.ColumnMappings.Add("Excel", "SQL") 
    bulkCopy.ColumnMappings.Add("Material", "Material") 
    bulkCopy.ColumnMappings.Add("Plnt", "Plant") 
    bulkCopy.ColumnMappings.Add("SLoc", "SLoc") 
    bulkCopy.ColumnMappings.Add("S", "S") 
    bulkCopy.ColumnMappings.Add("Batch", "Batch") 
    bulkCopy.ColumnMappings.Add("Special Stock Number", "SpecialStockNumber") 
    bulkCopy.ColumnMappings.Add("Material Description", "MatDesc") 
    bulkCopy.ColumnMappings.Add("Typ", "Type") 
    bulkCopy.ColumnMappings.Add("StorageBin", "StorageBin") 
    bulkCopy.ColumnMappings.Add("Available stock", "AvailStock") 
    bulkCopy.ColumnMappings.Add("BUn", "BUn") 
    'bulkCopy.ColumnMappings.Add("GR Date", "GRDate") 
    bulkCopy.WriteToServer(dr) 
    OleDbConn.Close() 
End Sub 
+0

你有什麼異常嗎? 活的服務器是否更遠(可能與超時有關)? 在事件查看器中是否有任何相關的內容? – Jedidja

+0

數據庫位於活動服務器上。一個也是一樣。我也沒有錯誤。它只是運行並停在某個記錄數。我爲兩個測試使用相同的excel文件。 – sunkur

+1

您提到IIS7框在大約190,000行之後停止。 IIS7服務器上的確切行數總是相同,還是在運行之間有所不同? –

回答

2

感謝Andy的ExcelDataReader提示!

掌握它與ExcelDataReader一起工作。看起來這是OleDB的內存問題。發佈我的代碼以防將來幫助他人。

Sub updateData() 
    Dim sSQLTable As String = "Table1" 

    'Execute a query to erase any previous data from our destination table 
    Dim sClearSQL = "DELETE FROM " & sSQLTable 
    Dim SqlConn As SqlConnection = New SqlConnection(ConnString) 
    Dim SqlCmd As SqlCommand = New SqlCommand(sClearSQL, SqlConn) 
    SqlConn.Open() 
    SqlCmd.ExecuteNonQuery() 
    SqlConn.Close() 


    Dim stream As FileStream = File.Open(savePath, FileMode.Open, FileAccess.Read) 

    '1. Reading from a binary Excel file ('97-2003 format; *.xls) 
    'Dim excelReader As IExcelDataReader = ExcelReaderFactory.CreateBinaryReader(stream) 

    '2. Reading from a OpenXml Excel file (2007 format; *.xlsx) 
    Dim excelReader As IExcelDataReader = ExcelReaderFactory.CreateOpenXmlReader(stream) 

    '3. DataSet - The result of each spreadsheet will be created in the result.Tables 
    'Dim ds As DataSet = excelReader.AsDataSet() 

    '4. DataSet - Create column names from first row 
    excelReader.IsFirstRowAsColumnNames = True 
    Dim ds As DataSet = excelReader.AsDataSet() 
    Dim sourceData As New DataTable() 
    sourceData = ds.Tables(0) 

    ''5. Data Reader methods 
    'Using destinationConnection As New SqlConnection(ConnString) 
    ' open the connection 

    'destinationConnection.Open() 
    'Using bulkCopy As New SqlBulkCopy(destinationConnection.ConnectionString) 

    ' column mappings 
    Dim bulkCopy As SqlBulkCopy = New SqlBulkCopy(ConnString, SqlBulkCopyOptions.UseInternalTransaction) 
    bulkCopy.BulkCopyTimeout = 2000 
    bulkCopy.DestinationTableName = sSQLTable 

    'DEMO bulkCopy.ColumnMappings.Add("Excel", "SQL") 
    bulkCopy.ColumnMappings.Add("Material", "Material") 
    bulkCopy.ColumnMappings.Add("Plnt", "Plant") 
    bulkCopy.ColumnMappings.Add("SLoc", "SLoc") 
    bulkCopy.ColumnMappings.Add("S", "S") 
    bulkCopy.ColumnMappings.Add("Batch", "Batch") 
    bulkCopy.ColumnMappings.Add("Special Stock Number", "SpecialStockNumber") 
    bulkCopy.ColumnMappings.Add("Material Description", "MatDesc") 
    bulkCopy.ColumnMappings.Add("Typ", "Type") 
    bulkCopy.ColumnMappings.Add("StorageBin", "StorageBin") 
    bulkCopy.ColumnMappings.Add("Available stock", "AvailStock") 
    bulkCopy.ColumnMappings.Add("BUn", "BUn") 
    'bulkCopy.ColumnMappings.Add("GR Date", "GRDate") 

    'bulkCopy.DestinationTableName = sSQLTable 
    bulkCopy.WriteToServer(sourceData) 

    '6. Free resources (IExcelDataReader is IDisposable) 
    excelReader.Close() 
End Sub 
相關問題