2011-12-12 3 views
1

iis6 (테스트 서버)과 iis7 (라이브 서버)에서는 sqlbulkcopy가 제대로 작동하지만 iis7에서 데이터를 업로드하면 행이 잘립니다. iis7에서 250000 개 중 ~ 190,000 개만 가져옵니다. iis 6에서는 동일한 코드/페이지를 사용하여 모든 250000 레코드를 문제없이로드합니다. 또한 두 서버가 동일한 SQL DB를 업데이트하고 있습니다.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

DB가 라이브 서버에 있습니다. 하나와 같은. 또한 오류가 없습니다. 특정 레코드 수에서 실행되고 중지됩니다. 나는 두 가지 테스트 모두에 대해 동일한 Excel 파일을 사용합니다. – sunkur

+1

약 190,000 행 후에 IIS7 상자가 중지된다고 언급했습니다. 정확한 행 수는 IIS7 서버에서 항상 동일합니까? 아니면 실행간에 달라 집니까? –

답변

2

감사합니다. 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 
관련 문제