Asp.net:Excel文件上传没有完成,但没有给出错误消息

时间:2014-05-20 13:38:13

标签: asp.net file-upload

我在尝试上传Excel文件并将其存储在ASP.net应用程序的SQL服务器表中时遇到了一个相当奇怪的问题。 文件不是太大:大约2.5或3 Mb。 问题是上传在加载某些行后“中断”,显然没有引起任何特定错误,因为加载过程通过显示我发送给客户端的成功消息完成:

  

“该过程已成功完成:从中上传了XXX行   文件”。

问题是XXX行不是文件中的所有行。根据Excel文件的每一列中的信息量,该过程仅上载例如文件所具有的总共25000行中的15500行。 (如果Excel文件中的信息较少,它可以上传,可以说它可能有25000行中的20000个... ...事实是该文件没有“完全”上传。

我已尝试增加web.config中的"httprequest-maxRequestLength"值,即使该文件不大于ASP.net默认的4Mb文件上传。 我正在使用上传和读取文件的代码(vb.net)基本上是这样的:

Dim connection As DbConnection = Nothing
Dim Command As DbCommand = Nothing
Dim ConexionStringExcel As String
Dim dr As DbDataReader
Dim mensajeError as String = ""
Dim ncAdic as Integer = 0
Dim nReg as Integer = 0

'String connection for Excel 2007: for now, I'm not allowing other Excel versions
ConexionStringExcel = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source = " & sNombreArch & ";" & _
    "Extended Properties=Excel 12.0 Xml;"

'sNombreArch is the full name of the uploaded file

connection = New OleDb.OleDbConnection(ConexionStringExcel)

Command = connection.CreateCommand()

Command.CommandText = "SELECT * FROM [" + nomHojaArch + "$]"

'---
'lblMensaje is a Label object in the aspx page:
'---
lblMensaje.Visible = False

Try
    'Open the Excel file
    connection.Open()
    'Read file content
    dr = Command.ExecuteReader()

    While dr.Read
        Try
            'Two first columns of the file are mandatory in my case...
            If Not IsDBNull(dr(0)) And Not IsDBNull(dr(1)) Then
                '---
                'dsTempCargue is a SqlDataSource object in the aspx page
                '---
                dsTempCargue.InsertParameters.Item("idReg").DefaultValue = dr(0)
                dsTempCargue.InsertParameters.Item("nombre").DefaultValue = dr(1)

                For ncAdic = 2 To 10
                    If Not IsDBNull(dr(ncAdic)) Then
                        dsTempCargue.InsertParameters.Item(ncAdic).DefaultValue = dr(ncAdic)
                    Else
                        dsTempCargue.InsertParameters.Item(ncAdic).DefaultValue = DBNull.ToString
                    End if
                Next

                dsTempCargue.Insert()

                                              nReg = nReg + 1
            Else
                mensajeError = "Column A and B of the File cannot be empty"
                Exit While
            End If
        Catch exRead As Exception
            mensajeError = "Error reading the file or saving its content: " & exRead.Message
            Exit While
        End Try             
    End While

    'If there was no error, show success message
    If String.IsNullOrEmpty(mensajeError) Then
        mensajeError = "The process finished successfuly. " & nReg.ToString() & " rows were uploaded from the file"
    End IF
Catch ex As Exception
    mensajeError = "Error uploading the file: " & ex.Message        
End Try 

lblMensaje.Text = mensajeError
lblMensaje.Visible = True

为什么你认为这个上传过程无法读取整个文件??? ...任何建议都将不胜感激。

非常感谢,

2 个答案:

答案 0 :(得分:0)

对于存储行的表,各种列的数据类型是什么?也许其中一个单元格的内容与列数据类型不兼容。你有办法检查吗?

答案 1 :(得分:0)

即使我真的不确定错误的原因是什么,我终于设法通过更改我的代码来使用我找到的第三方库并且有一些好的评论,可以在这里找到:

http://exceldatareader.codeplex.com/

我不确定最初的问题是什么以及为什么使用这个库解决了这个问题,但它确实有效。 (也许当我有一段时间我会尝试找到有关此问题的更多信息时)

感谢Patrick的评论以及所有感兴趣的内容