2013-04-24 43 views
0

我仍然在C#和SQL Server的学习曲线中,所以请原谅我的'绿色'。C#中的数据处理 - 最佳方法?

这里是我的情况:

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

事务表有薪水的元素,如基本工资,津贴代理,加班时间等,也有工资中扣除像事先扣除,一些贷款(含利息)和储蓄(养老,社会保障储蓄等

我需要通过每个员工的交易和计算税收,贷款未清余额,更新余额储蓄,转换时间为支付/扣除和一些其他的东西。

这种处理将会给我一个新的行集的每个员工都有一个周期标记(例如,2013年4月至2013年4月)。我需要将其存储在HISTORY表中供将来参考。

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

我被告知通过阅读器将整个表格拉进内存不是很好的做法,我同意。

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

呼叫到后端太多?

(EF不是我的选择,还是做原始的SQL ADO.NET中)

我会明白任何帮助。

+3

如果您只需要很少计算此税项,为何不编写一个Sql服务器存储过程来执行此操作?然后,你的C#程序可以读取“税收历史”表,或启动另一个重新计算(调用Sproc),如果需要... – Mansfield 2013-04-24 11:14:00

+2

是否有任何理由不在数据库中完全执行数据操作而不涉及。净? – 2013-04-24 11:14:18

+0

@将A:我将有超过50个数据库用于不同的工资单。在每月的事情处理。所以在我看来,我想在客户端进行处理。 – 2013-04-24 12:52:52

回答

2

10000行不多。如果没有一些宽泛的varchar或二进制列,内存很容易处理。不要被良好的实践“规则”完全锁定。另一方面,考虑stored procedure。然后所有处理将在服务器上本地完成。

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

+0

我的应用程序将处理超过50个不同的数据库(尽管相同),但每个数据库将针对一个客户帐户。所以sp维护可能是一个问题 - 我想也许我应该在客户端有处理登录。 – 2013-04-24 12:55:20

1

使用ROW_NUMBER()检出。程序可以使用它来允许大型表一次使用'x'行来浏览。那么你可以想象用同样的方法来批量处理,比如1000行。

请参阅this链接了解更多信息。

+0

我已查看链接。我会做一些测试,看看它是否适合我的情况。尽管如此。 – 2013-04-24 14:09:02

相关问题