C#中的数据处理 - 最佳方法?

时间:2013-04-24 11:11:06

标签: c# sql-server

我仍处于C#和SQL Server的学习曲线上,所以请原谅我的'绿色'。

以下是我的情景:

我有一个包含10,000行的EMPLOYEE表。这些员工中的每一个都在TRANSACTIONS表中进行交易。

交易表中有工资元素,如基本工资,代理津贴,加班时间等。还有工资扣除,如预扣款,部分贷款(有利息)和储蓄(养老金,社会保障储蓄等等。

我需要查看每位员工的交易和计算税金,贷款余额,更新储蓄余额,将小时数转换为付款/扣款以及其他一些内容。

此处理将为每位员工提供一组新的行,并带有句点标记(例如2013年4月的2013-04)。我需要将它存储在HISTORY表中以供将来参考。

处理整个10,000员工表及其交易的最佳方法是什么?

我被告知通过读者把整张桌子拉进记忆中并不是一种好习惯,我同意。

我是否一直从数据库中提取员工,处理他们的交易,并将历史记录提交到数据库?拉下一个等等?

对后端的调用太多了?

(EF不是我的选择,仍然在ADO.NET中执行原始SQL)

我将不胜感激。

2 个答案:

答案 0 :(得分:2)

10000行并不多。如果没有一些极大的varchar或二进制列,内存可以轻松处理。不要被良好的练习“规则”完全锁定。

另一方面,考虑stored procedure。然后所有处理将在服务器上本地完成。

编辑:如果以上都不是一个选项,请尝试流式传输结果。例如,在阅读查询时,请保存ConcurrentQueue中的每一行或类似的内容。在执行查询之前,启动另一个线程或BackgroundWorker检查队列中的新项目,并将结果同时保存到另一个SqlConnection上。查询完成后,工作将完成,队列有Count 0。

答案 1 :(得分:1)

使用ROW_NUMBER()结帐。这可以由程序使用,以允许使用' x'基本上浏览大表。一次行数。然后,您可以想象使用相同的方法来批量处理您的工作,例如,每次1000行。

有关详细信息,请参阅this链接。