从平面文件向SQLServer插入数百万条记录的陷阱是什么?我即将开始编写Windows窗体应用程序的旅程,该应用程序将打开一个大小约为230MB的竖线分隔的txt文件。然后,该应用程序将此数据插入到sqlserver2005数据库中(显然这需要快速进行)。我在这个项目中使用c#3.0和.net3.5。我不是要应用程序,只是在这里提供一些公共建议和潜在的陷阱。根据我在网站上收集到的信息,我发现SQL批量复制是我应该考虑的先决条件(我认为仅使用电子表格应用程序打开txt文件会很费力;可能将其分解为blob数据?)。谢谢,如果有人需要,我会编辑问题以明确。一定要写winforms应用吗?使用SSIS可能更容易、更快。有一些可用的内置任务,特别是批量插入任务。此外,值得检查SQLServer2005中平面文件批量导入方法的速度比较。更新:如果您不熟悉SSIS,请查看其中一些站点以快速入门。1)SSIS控制流基础知识2)SQLServerIntegrationServices入门这是另一个方法:将Excel文件导入SQL2005。这将是一项流式传输工作。如果可以,请不要在此处使用事务。交易成本太高。所以你所要做的就是一次一行地读取文件并一次插入一行。您应该将失败的插入转储到另一个文件中,您可以稍后进行诊断并查看失败的位置。首先,我会继续尝试大量插入几百行以查看流式处理效果,然后您可以打开所有想要的内容。你可以试试SqlBulkCopy。它允许您从“任何数据源”中提取数据。附带说明一下,有时删除表的索引并在批量插入操作后重新创建它们会更快。您可能会考虑从完全恢复切换到批量日志记录。这有助于将备份保持在合理的大小。我完全推荐SSIS,你可以读取数百万条记录并在相对较短的时间内清理它们。您需要留出一些时间来掌握SSIS,但它应该会有回报。SO上还有其他一些可能有用的线程:What'sthefastestwaytobulkinsertlargeamountofdatainSQLServer(C#client)WhatarerecommendedlearningmaterialsforSSIS?您还可以使用C#创建包。我有一个C#程序,它从遗留系统中读取3GL“主文件”(使用我为相关项目编写的API解析为对象模型),采用包模板并对其进行修改以生成ETL包。您所说的数据量实际上并没有那么大。我不知道你的效率问题是什么,但如果你可以等待几个小时来插入它,你可能会惊讶地发现使用一次只插入一行的非常幼稚的技术是多么容易。一次批量处理大量行并将它们提交给SQLServer可能会更快。如果您不需要它像您想象的那样快,那么只是一个建议,可以节省一些严肃的编程时间。根据导入运行的频率,节省几天的编程时间以换取运行时的几个小时等待可能是值得的。您可以使用SSIS读取和插入,但将其称为来自WinForms应用程序的包。然后您可以将源、目标、连接字符串等作为参数/配置传递。HowTo:http://msdn.microsoft.com/en-us/library/aa337077.aspx您可以在SSIS中设置转换和错误处理,甚至可以根据输入参数创建逻辑分支。如果文件的列格式与数据需要结束的目标表匹配,我更喜欢使用命令行实用程序bcp加载数据文件。它非常快,您可以为任何无法插入的“怪异”记录指定错误文件。如果您需要存储命令行参数(服务器、数据库、用户名/密码或可信连接、表、错误文件等),您的应用程序可以启动该命令。与运行BULKINSERTSQL命令相比,我更喜欢这种方法,因为数据文件不需要位于数据库服务器可访问的系统上。要使用批量插入,必须指定要加载的数据文件的路径,因此它必须对运行加载的数据库服务器上的系统用户可见和可读。通常对我来说太麻烦了。?以上是C#学习教程:从平面文件向SQLServer插入百万条记录有哪些陷阱?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
