我在尝试上传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
为什么你认为这个上传过程无法读取整个文件??? ...任何建议都将不胜感激。
非常感谢,
迭
答案 0 :(得分:0)
对于存储行的表,各种列的数据类型是什么?也许其中一个单元格的内容与列数据类型不兼容。你有办法检查吗?
答案 1 :(得分:0)
即使我真的不确定错误的原因是什么,我终于设法通过更改我的代码来使用我找到的第三方库并且有一些好的评论,可以在这里找到:
http://exceldatareader.codeplex.com/
我不确定最初的问题是什么以及为什么使用这个库解决了这个问题,但它确实有效。 (也许当我有一段时间我会尝试找到有关此问题的更多信息时)
感谢Patrick的评论以及所有感兴趣的内容