【发布时间】:2014-08-12 08:39:51
【问题描述】:
我有一个包含大约 800 万条记录的 SQL Server 表,用于一个研究项目,我需要为每条记录计算一些值并将这些值保存在记录中。计算相当复杂,所以我缺乏 T-SQL 知识意味着我想使用 .net 进行处理,尽管 T-SQL 脚本无疑是最好的选择。
我的方法很简单,但还是失败了。我正在使用数据阅读器(带有自己的连接)来遍历所有记录。我正在使用另一个连接来创建使用存储过程执行更新的命令。大约一百万后,它会因超时错误而失败。
我一开始尝试使用 EF,但速度很慢,即使我尝试了各种方法,我也很难防止内存不足异常。
使用 .net 执行此操作的最佳方法是什么?我是否使用错误的连接?我读过错误地使用多个连接会导致超时异常。
这是代码示例(VB.NET):
Public Sub UpdateRecords()
Dim ReadConnection As New SqlConnection("ConnectionString")
Dim WriteConnection As New SqlConnection("ConnectionString")
Dim Reader As SqlDataReader
Dim ReadCommand As SqlCommand
Dim WriteCommand As SqlCommand
Dim Transaction As SqlTransaction
ReadConnection.Open()
ReadCommand = New SqlCommand("select * from records", ReadConnection)
Reader = ReadCommand.ExecuteReader
If Reader.HasRows Then
WriteConnection.Open()
Transaction = WriteConnection.BeginTransaction
Do While Reader.Read
WriteCommand = New SqlCommand("StoredProcedure", WriteConnection, Transaction)
'calculate
'set parameters
WriteCommand.ExecuteNonQuery()
Loop
Transaction.Commit()
WriteConnection.Close()
End If
Reader.Close()
ReadConnection.Close()
End Sub
【问题讨论】:
-
使用 .net 执行此操作的最佳方法是什么? 学习 Transact-SQL。使用
SqlConnection和SqlCommand执行更新数据的 Transact-SQL 查询。 -
最好的方法是使用 T-SQL .... 并直接在服务器 !
-
我知道这一点(正如我在问题中所说的那样),但是如果处理速度(它将在一个晚上运行一次)和最佳实践无关紧要(它是一个研究项目),但是我学习 T-SQL 的速度是一个问题,那么如何使用 .net 来完成呢?
-
你能和我们分享一下计算吗?也许有人可以帮助您将计算转换为 T-SQL,因为从 .net 执行此操作可能会带来一些非常难看的超时和性能问题。一条一条地处理 800 万条记录将杀死您运行程序的服务器/计算机。您不仅需要计算每条记录的结果,还必须首先将这些记录流式传输到您的计算机...
-
您的案例实际上需要 SQL 解决方案,因为 C#/VB 对于此类任务非常不适合。不如问我们如何编写您需要的
update语句?
标签: .net sql-server vb.net