这是我第一次使用c#和sql server编写一个简单的月度报告应用程序,该应用程序将报告打印到纸上。 一切都很好,但比较两个值时,我有一个复杂的问题。
假设每个月有14列(最初37列)和12行。我用于月份名称的最后一栏。
列是:
Name, col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,monthName.
从逻辑上讲,一年内将有12份报告。
COL2 + COL5 + COL6
和
col7 + col10 + col11当月的总和
必须与上个月col4和col9-12行
这是我的主要问题!
例如,如果monthName有1月(作为上个月),我填写当月2月。有一个名为“验证”的pushButton 如果我点击验证,则2月份的3列总和将与1月份的1列总和进行比较。
我尝试了一些像select * from table1 where sum(col4)=sum(col2+col5+col6) and sum(col9)=sum(col7+col10+col11)
这样的SQL查询
但是我的逻辑和知识完全有缺陷,因为它没有按预期工作。
其次,我认为将来自sql查询结果的数据附加到List<>
并且比较col4 / col9将是一个想法但又有缺陷,因为没有保证Name列的值不会被洗牌,这将导致比较错误的数据,我也不自信。
我需要c#和sql数据库专家的帮助才能有机会这样做,因为我不确定我的选择是什么!
更新:我正在视觉工作室做一些实验。所有代码都只是丑陋但如果有人想要尝试,我会将它上传到Dropbox。
答案 0 :(得分:0)
我认为这里最好的解决方案是将业务逻辑和数据库查询分开。如果用户点击&#34;验证&#34; &#34;二月&#34;在行中,您只需提交SELECT * FROM table1 WHERE monthName = 'january'
行的数据库查询,但是:
一旦你得到了这个结果,你只需使用简单的C#逻辑来进行验证,就像这样:
int priorMonthSum1 = priorMonthResultset.col4;
int priorMonthSum2 = priorMonthResultset.col9 + priorMonthResultset.col10 + priorMonthResultset.col11 + priorMonthResultset.col12;
int currentMonthSum1 = currentMonthResultset.col2 + currentMonthResultset.col5 + currentMonthResultset.col6;
int currentMonthSum2 = currentMonthResultset.col7 + currentMonthResultset.col10 + currentMonthResultset.col1;
if(priorMonthSum1 != currentMonthSum1 || priorMonthSum2 != currentMonthSum2)
{
// handle mismatch (highlight red?)
}
else
{
// handle match (highlight green?)
}