将数据从 Excel 复制到 SQL 数据库 - 不上传所有记录
Posted
技术标签:
【中文标题】将数据从 Excel 复制到 SQL 数据库 - 不上传所有记录【英文标题】:Copy data from Excel to SQL database - Not uploading all Records 【发布时间】:2020-07-01 14:23:50 【问题描述】:我正在使用 ASP.NET 4.7 网站将数据从 Excel 文件上传到 SQL Server 数据库。实际上这是一个 DotNetNuke 网站。
我正在使用以下代码。这是我在代码中使用的确切方法。
https://www.aspsnippets.com/Articles/Import-Excel-data-to-SQL-Server-Database-in-ASPNet-using-C-and-VBNet.aspx
所以这段代码可以正常工作,我可以将我的 Excel 数据传输到 SQL Server 数据库。
我的问题是传输数据限制。
它没有传输所有数据。当我有更多记录和更多列时,它只传输第一条记录。
通常,我的 Excel 文件大约 3 MB,它有 60 000 条或更多记录。但它只通过了大约 18000-25000 条记录。当我删除一些 Excel 列并仅传递几列时,它会增加记录数。当我只上传一列时,它会传递所有记录。当我一一添加列时,复制的记录数正在减少。
我觉得,我们可以传递的数据是有限制的。我怎样才能增加这个?
在web.config
,我改变了这样的设置:
<!-- allow large file uploads -->
<httpRuntime targetFramework="4.7.2" shutdownTimeout="21600"
executionTimeout="60000" useFullyQualifiedRedirectUrl="true"
maxRequestLength="2097151" requestLengthDiskThreshold="2097151"
maxUrlLength="2048" requestPathInvalidCharacters="<,>,*,%,:,\,?"
enableVersionHeader="false" requestValidationMode="2.0"
fcnMode="Single" />
但没有运气。这并没有改变什么。
我还应该考虑什么?
服务器设置? (我有 RDP 访问权限) 应用程序池设置? 网站设置? SQL Server 设置? 数据库设置? 我使用的代码有限制吗?请问,您能就此提出建议吗?非常感谢您对此的支持。
谢谢。
【问题讨论】:
Excel 2003 的每个工作表 (xls) 限制为 64,000 行。您可以在 2007+ (xlsx) 中拥有更多行。因此,如果您为 oledb 使用 JET 驱动器(或指定 xls 文件名),您将被限制为 64,000 行。最近我发现在最新的带有 xlsx 文件的 excel 中,每个工作表只能导入 1,000,000 行。 我只能通过 18151 或类似的东西。如果我删除一些列,那么我可以传递更多。我正在使用 我正在使用我的参考链接中的确切代码问题。 您可能只是在第 18151 行有错误数据。试试 IMEX 选项。请参阅:connectionstrings.com/excel。第 1 列的每一行都有数据吗? 没有。这不是原因。我使用具有不同数据的不同文件。 18151 是我所说的示例计数。如果我逐列删除,那么记录数会相应增加。 拜托,有人帮我吗?我真的很感谢你对我的支持。谢谢。 【参考方案1】:我找到了解决这个问题的方法。
我正在使用我的连接字符串到这样的 excel 文件。
<add name="Excel07+ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=0;Extended Properties='Excel 8.0;HDR=YES;'" />
我添加了“IMEX=1;”如下所示。
<add name="Excel07+ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=0;Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'" />
这解决了我的问题。非常感谢。
【讨论】:
这是我的建议。使用 IMAX 将数据视为文本而不是对象。 JET/ACE 将数据视为 Excel 处理 GENERAL 格式并尝试猜测类型。经常猜错。 IMAX 禁用猜测并将数据视为字符串。 是的。我非常感谢您的大力支持。我不知道如何使用 IMEX 选项,也不知道有这样的选项。您的经验对找到此解决方案很有帮助。谢谢。以上是关于将数据从 Excel 复制到 SQL 数据库 - 不上传所有记录的主要内容,如果未能解决你的问题,请参考以下文章
SSIS 将数据从 SQL db 复制到同一 excel 目标上的多个选项卡
使用 C# 和 ASP.NET 将数据从 Excel 文件导出到 SQL Server 表的最佳方法? [复制]