Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个相同的命令/函数,时间跨度不同(仍然是全年),但结果不同_C#_Sql - Fatal编程技术网

C# 两个相同的命令/函数,时间跨度不同(仍然是全年),但结果不同

C# 两个相同的命令/函数,时间跨度不同(仍然是全年),但结果不同,c#,sql,C#,Sql,所以基本上我要做的是首先选择全年的汇总并显示出来 然后我选择全年,但每季度4x3个月,当我总结它时,它会给我不同的结果。我不知道为什么,我认为这可能是因为日期跨度,但我认为这是好的。所以,如果你需要更多的东西,告诉我,但这是做所有事情的代码 这是我的第一个功能: using (FbCommand cmd = new FbCommand("SELECT SUM(UPLACENO) FROM DOKUMENT WHERE (VRDOK = 15) AND (MAGACINID = @MagacinI

所以基本上我要做的是首先选择全年的汇总并显示出来

然后我选择全年,但每季度4x3个月,当我总结它时,它会给我不同的结果。我不知道为什么,我认为这可能是因为日期跨度,但我认为这是好的。所以,如果你需要更多的东西,告诉我,但这是做所有事情的代码

这是我的第一个功能:

using (FbCommand cmd = new FbCommand("SELECT SUM(UPLACENO) FROM DOKUMENT WHERE (VRDOK = 15) AND (MAGACINID = @MagacinID) AND (DATUM BETWEEN @PocetakMeseca AND @KrajMeseca) OR (VRDOK = 13) AND (MAGACINID = @MagacinID) AND (DATUM BETWEEN @PocetakMeseca AND @KrajMeseca)", con))
                {
                    decimal[] mesecneVrednosti = new decimal[magacini.Length];

                    FbDataReader dr;

                    cmd.Parameters.Add("@MagacinID", FbDbType.Integer);
                    cmd.Parameters.Add("@PocetakMeseca", FbDbType.Date);
                    cmd.Parameters.Add("@KrajMeseca", FbDbType.Date);

                    DateTime pocetakMeseca = new DateTime(trenutnaBaza, 1, 1, 0, 0, 0);
                    DateTime krajMeseca = new DateTime(trenutnaBaza, 1, 31, 23, 59, 59);
                    DateTime krajGodine = new DateTime(trenutnaBaza, 12, 31, 23, 59, 59);

                    int i = 0;

                    while (krajMeseca < krajGodine)
                    {
                        cmd.Parameters["@MagacinID"].Value = magacin;
                        cmd.Parameters["@PocetakMeseca"].Value = pocetakMeseca;
                        cmd.Parameters["@KrajMeseca"].Value = krajMeseca;

                        dr = cmd.ExecuteReader();

                        while (dr.Read())
                        {
                            if (!(dr[0] is DBNull))
                            {
                                mesecneVrednosti[i] = Convert.ToDecimal(dr[0]);
                            }
                            else
                            {
                                mesecneVrednosti[i] = 0;
                            }
                        }
                        dr.Close();

                        pocetakMeseca = pocetakMeseca.AddMonths(1);
                        krajMeseca = krajMeseca.AddMonths(1);
                        i++;
                    }

                    currentChart.Titles.Add("Magacini");

                    for (int y = 0; y < meseci.Length; y++)
                    {
                        Series series = currentChart.Series.Add(Convert.ToString(meseci[y]));

                        series.Points.Add(Convert.ToDouble(mesecneVrednosti[y]));
                        currentChart.Series[y]["PointWidth"] = "1.8";
                    }
                }
这是第二个:

using (FbCommand cmd = new FbCommand("SELECT SUM(UPLACENO) FROM DOKUMENT WHERE (VRDOK = 15) AND (MAGACINID = @MagacinID) AND (DATUM BETWEEN @PocetakKvartala AND @KrajKvartala) OR (VRDOK = 13) AND (MAGACINID = @MagacinID) AND (DATUM BETWEEN @PocetakKvartala AND @KrajKvartala)", con))
                {
                    decimal v_prviKvartal = 0;
                    decimal v_drugiKvartal = 0;
                    decimal v_treciKvartal = 0;
                    decimal v_cetvrtiKvartal = 0;

                    FbDataReader dr;

                    cmd.Parameters.Add("@MagacinID", FbDbType.Integer);
                    cmd.Parameters.Add("@PocetakKvartala", FbDbType.Date);
                    cmd.Parameters.Add("@KrajKvartala", FbDbType.Date);

                    DateTime pocetakKvartala = new DateTime(trenutnaBaza, 1, 1, 0, 0, 0);
                    DateTime krajKvartala = new DateTime(trenutnaBaza, 3, 31, 23, 59, 59);
                    DateTime krajGodine = new DateTime(trenutnaBaza, 12, 31, 23, 59, 59);

                    int kvartal = 1;

                    while (krajKvartala < krajGodine)
                    {
                        cmd.Parameters["@MagacinID"].Value = magacin;
                        cmd.Parameters["@PocetakKvartala"].Value = pocetakKvartala;
                        cmd.Parameters["@KrajKvartala"].Value = krajKvartala;

                        dr = cmd.ExecuteReader();

                        while (dr.Read())
                        {
                            if (!(dr[0] is DBNull))
                            {
                                switch(kvartal)
                                {
                                    case 1:
                                        v_prviKvartal = Convert.ToDecimal(dr[0]);
                                        break;
                                    case 2:
                                        v_drugiKvartal = Convert.ToDecimal(dr[0]);
                                        break;
                                    case 3:
                                        v_treciKvartal = Convert.ToDecimal(dr[0]);
                                        break;
                                    case 4:
                                        v_cetvrtiKvartal = Convert.ToDecimal(dr[0]);
                                        break;
                                }
                            }
                            else
                            {
                                prviKvartal.Text = "0";
                            }
                        }
                        dr.Close();

                        pocetakKvartala = pocetakKvartala.AddMonths(3);
                        krajKvartala = krajKvartala.AddMonths(3);

                        kvartal++;
                    }
                    decimal ukupno = v_prviKvartal + v_drugiKvartal + v_treciKvartal + v_cetvrtiKvartal;

                    prviKvartal.Text = String.Format("{0:n}", v_prviKvartal) + " - " + String.Format("{0:n}%", (v_prviKvartal / ukupno) * 100);
                    drugiKvartal.Text = String.Format("{0:n}", v_drugiKvartal) + " - " + String.Format("{0:n}%", (v_drugiKvartal / ukupno) * 100);
                    treciKvartal.Text = String.Format("{0:n}", v_treciKvartal) + " - " + String.Format("{0:n}%", (v_treciKvartal / ukupno) * 100);
                    cetvrtiKvartal.Text = String.Format("{0:n}", v_cetvrtiKvartal) + " - " + String.Format("{0:n}%", (v_cetvrtiKvartal / ukupno) * 100);
                }

仅使用AddMonths1无法获得月底。它将一直工作到2月,给你28.02或29.02,但之后你将得到3月28日或29日,依此类推。因此,在第一个场景中,您计算的不是整个月份,而在季度的情况下,您意外地没有损失天数

您可以在此处使用解决方案:[]以查找请求参数

已解决

问题是DateTime.AddMonth将+1添加到month,所以当2月份到来时,它会增加28天,增加一个月,但这仍然是第28天,但现在是3月份

我是这样解决的:


krajMeseca=新DateTimetrenutnaBaza,krajMeseca.Month+1,DateTime.DaysInMonthtrenutnaBaza,krajMeseca.Month+1,23,59,59

我试过了,但根本不起作用。你可以试试krajMeseca=new DateTime trenutnaBaza,i+1,DateTime.DaysInMonthtrenutnaBaza,i+1,23,59;或者简单地说,krajMeseca=新的DateTimetrenutnaBaza,1,31,23,59,59.AddMonths i+1;假设我没有增加,你的答案基本上与我建议的答案相同。@i或者是的,但如果你解决了问题,你需要将它作为答案,并标记为完成。谢谢你的帮助。事实上,如果你从解决你问题的人那里得到答案,你会把这个答案标记为完成。只有当你没有得到任何好的答案并且自己解决了问题时,你才会发布你的解决方案。