To samo zapytanie zwraca inne wartości w MS SQL Managment studio i asp.net gridview

0

Witam,
Mam dość dziwny problem z wyświetleniem danych. Chodzi o to, że "te same zapytanie" w MS SQL MNAGMENT STDUIO zwraca inne wartości niż w gridview asp.net
Co śmieszniejsze nie zawsze np. dla jednego zakresu dat potrafi zwrócić takie same wartości a już inne daty powodują, że zwraca złą wartość w gridview natomiast w mssms zwraca poprawne wartości.

Zapytanie:

 
SELECT b.id_maszyna, c.Maszyna, SUM(a.Sztuki_dobre) AS Sztuki_dobre, SUM(a.Sztuki_braki_operator + a.Sztuki_braki_ustawiacz) AS Braki, 
SUM(b.ilosc) AS ilosc, AVG(a.czas_cyklu) AS czas_cyklu, 
((SUM(a.Sztuki_dobre + a.Sztuki_braki_operator + a.Sztuki_braki_ustawiacz) *AVG(a.czas_cyklu)/3600))AS czas_produktywny,
((1*3*8) - (((SUM(a.Sztuki_dobre + a.Sztuki_braki_operator + a.Sztuki_braki_ustawiacz) *AVG(a.czas_cyklu)/3600)))) AS brak_planu, 
(SUM(a.Sztuki_dobre) +  SUM(a.Sztuki_braki_operator + a.Sztuki_braki_ustawiacz)) AS Ilosc
FROM formularz AS a 
INNER JOIN zlecenia AS b ON a.Id_zlecenia = b.id 
INNER JOIN maszyny AS c ON b.id_maszyna = c.Id_maszyny
WHERE CONVERT(datetime, a.Data, 101) BETWEEN '2016-04-04' and '2016-04-04' AND a.Usuniety_flaga=0
GROUP BY b.id_maszyna, c.Maszyna

Dla daty '2016-04-04' zwraca poprawne wartości w obu przypadkach:
<image>82fca21d94.png
</image>

Np dla daty '2016-04-05' w managment studio zwraca poprawne dane
<image>
40d4369911.png
</image>

Mój GridView

<asp:GridView ID="GridViewRaport1" runat="server" CssClass="gv" ShowHeaderWhenEmpty="True" EmptyDataText="Brak wpisów w Bazie" AlternatingRowStyle-BackColor="#AAB3BB" EmptyDataRowStyle-ForeColor="Red" AutoGenerateColumns="False" DataKey="Maszyna" Width="600px" >
                                                                                                                                    <AlternatingRowStyle BackColor="#AAB3BB" />
                                                                                                                                    <Columns>
                                                                                                                                        <asp:TemplateField HeaderText="" FooterStyle-BackColor ="red">
                                                                                                                                            <ItemTemplate>
                                                                                                                                                <asp:Label ID="lblMaszynyRaport" runat="server" Text='<%# Eval("Maszyna")%>'></asp:Label>
                                                                                                                                            </ItemTemplate>
                                                                                                                                            <FooterStyle BackColor="#5D7B9D" />
                                                                                                                                        </asp:TemplateField>
                                                                                                                                        <asp:TemplateField HeaderText="Produkcja dobre">
                                                                                                                                            <ItemTemplate>
                                                                                                                                                 <asp:Label ID="lblProdukcjaDobre" runat="server" Text='<%# Eval("Sztuki_dobreTmp")%>'></asp:Label> 
                                                                                                                                            </ItemTemplate>
                                                                                                                                        </asp:TemplateField>
                                                                                                                                        <asp:TemplateField HeaderText="Braki">
                                                                                                                                            <ItemTemplate>
                                                                                                                                               <asp:Label ID="lblBrakiRaport" runat="server" Text='<%# Eval("BrakiTmp")%>'></asp:Label> 
                                                                                                                                            </ItemTemplate>
                                                                                                                                        </asp:TemplateField>
                                                                                                                                              <asp:TemplateField HeaderText="Czas produktywny">
                                                                                                                                            <ItemTemplate>
                                                                                                                                                <asp:Label ID="lblCzasProduktywny" runat="server" Text='<%# Eval("czas_produktywnyTmp")%>'></asp:Label>
                                                                                                                                            </ItemTemplate>
                                                                                                                                        </asp:TemplateField>
                                                                                                                                        <asp:TemplateField HeaderText="Brak planu">
                                                                                                                                            <ItemTemplate>
                                                                                                                                                <asp:Label ID="lblBrakPlanuRaport" runat="server" Text='<%# Eval("brak_planuTmp")%>'></asp:Label> 
                                                                                                                                            </ItemTemplate>
                                                                                                                                        </asp:TemplateField>
                                                                                                                                  
                                                                                                                                      
                                                                                                                                    </Columns>
                                                                                                                                    <EmptyDataRowStyle ForeColor="Red" />
                                                                                                                                </asp:GridView>
 

Kod c#

   public DataTable generujRaport1(SqlConnection sqlPolaczenie, GridView gridViewRaport1, string dataOd, string dataDo, 
                                        int zmiana, int iloscDniPomiedzyDatami)//Metoda- pobiera dane do gridViewRaport1 z bazy danych z formularz
        {
            string raport1WszystkieZmiany = "SELECT b.id_maszyna, c.Maszyna, SUM(a.Sztuki_dobre) AS Sztuki_dobreTmp, SUM(a.Sztuki_braki_operator + a.Sztuki_braki_ustawiacz) AS BrakiTmp,SUM(b.ilosc) AS iloscTmp, AVG(a.czas_cyklu)AS czas_cykluTmp, ((SUM(a.Sztuki_dobre + a.Sztuki_braki_operator + a.Sztuki_braki_ustawiacz) * AVG(a.czas_cyklu)/3600))AS czas_produktywnyTmp," +"((" + iloscDniPomiedzyDatami + "*3*8) - (((SUM(a.Sztuki_dobre + a.Sztuki_braki_operator + a.Sztuki_braki_ustawiacz) *AVG(a.czas_cyklu)/3600)))) AS brak_planuTmp, (SUM(a.Sztuki_dobre) +  SUM(a.Sztuki_braki_operator + a.Sztuki_braki_ustawiacz)) AS IloscTmp FROM formularz AS a INNER JOIN zlecenia AS b ON a.Id_zlecenia = b.id INNER JOIN maszyny AS c ON b.id_maszyna = c.Id_maszyny WHERE CONVERT(datetime, a.Data, 101) BETWEEN '" + dataOd + "'and'" + dataDo + "'" + "AND a.Usuniety_flaga=0 AND a.id_ GROUP BY b.id_maszyna=@id_maszyna, c.Maszyna";
           
            string raport1WybraneZmiany = "";
            DataTable dt = new DataTable();
            try
            {
                if (zmiana == 0)
                {
                    using (SqlCommand cmd = new SqlCommand(raport1WszystkieZmiany, sqlPolaczenie))
                    {
                        SqlDataAdapter adpt = new SqlDataAdapter(cmd);
                        adpt.Fill(dt);
                        gridViewRaport1.DataSource = dt;
                        gridViewRaport1.DataBind();
                    }
                }
                else if (zmiana != 0)
                {
                    using (SqlCommand cmd = new SqlCommand(raport1WybraneZmiany, sqlPolaczenie))
                    {
                        SqlDataAdapter adpt = new SqlDataAdapter(cmd);
                        adpt.Fill(dt);
                        gridViewRaport1.DataSource = dt;
                        gridViewRaport1.DataBind();
                    }
                }
          
           
            }
            catch
            {

            }
            return dt;
        }

 

Tutaj kilka zmiennych jest podstawianych z kontrolek, ale sprawdziłem wartości na 100% są poprawne.

0

Zapomniałem dodać, że np. dla daty '2016-04-05' w gridview zwraca mi "brak danych" mimo tego, że są i generują się przy użyciu managment studio

0

Wygląda an to, że udało mi się rozwiązać problem.
Problem był z typem daty zamiast tego:

WHERE CONVERT(datetime, a.DATA, 101) BETWEEN '2016-04-04' AND '2016-04-04' AND a.Usuniety_flaga=0 

powinno być

WHERE CONVERT(nvarchar, a.DATA, 101) BETWEEN '2016-04-04' AND '2016-04-04' AND a.Usuniety_flaga=0 

Tak naprawdę powinnienem zamienić to na typ DateTime pod bazą... ale nie będę ruszał na razie dopóki dokładnie nie sprawdzę powiązań.

1 użytkowników online, w tym zalogowanych: 0, gości: 1