.net - .net 中长时间运行的数据库操作

标签 .net sql-server ado.net

我有一个带分隔符的文件,用于通过 .net 应用程序在 sql server 表中插入/更新记录。 该文件有大约 80000 条记录,每天处理一次。 我的问题:在我旋转 80000 行中的每一行时保持与数据库的连接打开是否安全甚至明智,还是我应该关闭连接并在循环的每次迭代中重新打开?这本身听起来很麻烦。 但是,我担心长时间保持打开的连接,持有锁并不必要地耗尽内存。 什么是更可扩展、更安全和更明智的方式来做到这一点?

最佳答案

首先,不,你不应该每一行都打开/关闭连接。对于 80,000 行,这将花费很长时间并且只会增加开销。您可以考虑对行进行批处理(例如每 10-500 行重置一次连接)。幸运的是,有一个更好的选择:

其次,从 .Net 应用程序向数据库中插入/更新那么多行的正确方法是使用 SQLBulkCopy methods ,而不是 INSERT 或 UPDATE 命令。您应该使用 SQLBulkCopy 将数据行加载到保留/暂存表中,然后使用 SQL 存储过程对实际表执行插入/更新,整体。

如果您担心 SQLBulkCopy 的持续负载,它有内置的批处理选项。

使用这种技术,初始数据上传应该至少快 5 倍,而实际的表插入/更新应该只需要几秒钟。

关于.net - .net 中长时间运行的数据库操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14819328/

相关文章:

.net - NetworkStream 和 Socket 类有什么区别?

sql-server - 如何让 SQLAlchemy 使用配置文件将 MSSQL 连接到 AWS?

sql-server - 如何检查 ASP.NET MVC4 应用程序性能?

c# - 一次访问数据库就可以在 LINQ 中更新?

c# - 我可以使用 DataAdapter C# 填充列表吗

c# - 在 BotFramework 上启动从机器人到用户的消息

c# - 转换为 IList 然后在 null 时调用 ToList() 是否比普通 ToList() 更好?

asp.net - IIS 配置错误 - 此配置部分不能在此路径中使用

sql-server - TSQL - 在事务语句中创建存储过程

c# - 我应该在 "using"语句中使用 SqlDataReader 吗?