将数据从 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="&lt;,&gt;,*,%,:,\,?" 
             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 表的最佳方法? [复制]

脚本任务从 Excel 批量复制到 Sql Server 2008。标题后缺少第一行

Excel 2013拼接Sql字符串

SQL从数据库导出数据到EXCEL换行的问题解决方法

VBA中的Excel过滤和复制