Weryfikcja czasu pracy - weryfikacja kodu

1

Cześć,

Dopiero co zaczynam swoją przygodę z C#, ADO.NET .NET, (póki co nierozumiem czym różnią się te trzy nazwy). Kupiłem na allegro fajne trzy książki:

  1. TECHNOLOGIE ASP.NET i ADO.NET w Visual Web Developer 2005 - zrobiłem z niej Sklep internetowy oraz Konferencje
  2. ĆWICZENIA ASP.NET w Visual Web Developer 2008 - zrobiłem w niej Stronę dla Nauczycieli.
  3. C# i .NET Stephan C.Perry C# 2.0 - nic z niej nie zrobiłem, książka kompendium wiedzy - za duża.

Ćwiczenia dały mi pewność siebie, że programowanie na prawdę jest dla każdego, ale należy cały czas tworzyć aplikacje.

W mojej pracy mam czas na rozwój. Przełożony dał mi zielone światło by w wolnej chwili nauczyć się C#. Jako pierwszy projekt z którego będę rozliczony to - Ewidencja Czasu Pracy. Z racji tego, że ćwiczyłem w Visual Web Developer rozpocząłem prace w wersji 2008. Z podłączoną bazą danych w SQL Serwer 2012.

0 - opis strony
1.1 Na pierwszej stronie, wybieram z DropDownList pracownika (wprowadzonego wczesniej, bedzie tez opcja aby dopisac nowego pracownika - zrobić INSERT)
2.1 Na stronie drugiej, głównym zamierzeniu jest liczenie czasu pracy pracownika, odbywa się to za pomocą wyboru daty wejscia i daty wyjscia, i pokazana ilość godzin pracy w tym okresie. Tworzona jest tymczasowa tabela za pomoca "Stored Procedure 2".

1
Oczekiwania od użytkowników 4programmers:
Odpowiedzi na pewne pytania:
1.1) Czy obecnie używacie Stored Procedure?
1.2) Jak komunikować się z bazą danych? Znajomy powiedział, że sposób jaki teraz to zrobiłem:

SqlDataSource1.InsertCommand = "INSERT INTO dane (ID_USER)  VALUES ('" + DropDownList1.Text + "')";

jest sprzed 10ciu lat, a teraz stosuje się frameworki, prosiłbym jakis przyklad, bo nie wyobrazam sobie innej metody w tym momencie.
1.3) Czy jak stworzyłem Stored Procedure 2 i pojawiła mi się tmczasowa tabela, to czy mogę jedynie do LABEL1 wywołać wynik? aby powstał tekst w stylu: "Pracownik przepracował 14:01 godzin" Teraz mam tak, że jest tabela o nazwie "Dupa" i w kolejnym wierszu 14:01. Jak tak to jak to napisać (tabela tymczasowa - rozumiem, przez to, że pojawia się na czas życia sesji, nigdzie nie jest zapisywana i znika)
1.4) Z biegiem czasu dopisze więcej pytań.
1.5) Jak dodać zdjęcia do tekstu na forum 4programmers? Obecnie są jako załącznik
1.6) Liczę na Wasze sugestie.

2
No i kod strony: (jest to propotyp, więc wyciągam z MSSQL tabele aby były widoczne)
2.1) Wygląd:
Dodałem dwa załączniki ale nie wiem jak zrobić by były widoczne
<image>1.jpg</image>
<image>2.jpg</image>

2.2) Kod:

Strona Default.aspx:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string data = DateTime.Now.ToString();
        SqlDataSource1.InsertCommand = "INSERT INTO dane (ID_USER)  VALUES ('" + DropDownList1.Text + "')";
        try
        {
            SqlDataSource1.Insert();
            Label1.Text += "Pracownik" + " " + DropDownList1.DataTextField + " wszedł do biura: " + data + "<BR>";
            //DropDownList1.DataTextField = "";
        }
        catch (Exception exc)
        {
            Label1.Text += data + "<FONT COLOR=red>" + exc.Message + "</FONT><BR>";
        }

    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        string data = DateTime.Now.ToString();
        SqlDataSource1.UpdateCommand = "UPDATE dane SET DATA_WYJSCIA = getdate() WHERE DATA_WYJSCIA IS NULL AND ID_USER = '" + DropDownList1.Text + "' ";
        try
        {
            SqlDataSource1.Update();
            Label1.Text += "Pracownik" + " " + DropDownList1.Text + " wyszedł z biura: " + data + "<BR>";
            //DropDownList1.DataTextField = "";
        }
        catch (Exception exc)
        {
            Label1.Text += data + "<FONT COLOR=red> + exc.Message + </FONT><BR>";
        }

    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        Response.Redirect("Tabela.aspx");
    }
}

Strona druga z Tabelami:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Tabela : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Default.aspx");
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        GridView4.Visible = true;
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        Label1.Text = Calendar2.SelectedDate.ToShortDateString();
    }
}

Stored Procedure 2 z MSSQL:

USE [NazwaDATA_DEV]
GO
/****** Object:  StoredProcedure [dbo].[Piotrek2]    Script Date: 21.07.2016 09:45:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================

ALTER  PROCEDURE [dbo].[Piotrek2]
@UsrID	as int,
@DataWej as DateTime,
@DataWyj as DateTime

AS
BEGIN

DECLARE @durMinutes int;
DECLARE @duration nvarchar(30);
--DECLARE @dzien nvarchar(20) ;


--select data_wejscia from dane where ID_user=1 and DATA_WEJSCIA='2016-06-20 08:00:11.663'
--SET @dzien = (SELECT substring(convert(varchar(10), (@DataWyj - @DataWej),120),9,10) FROM DANE WHERE id_user=@UsrID)

SET @durMinutes = (SELECT SUM(datediff(minute, data_wejscia, data_wyjscia))minuty FROM DANE WHERE id_user=@UsrID AND (DATA_WEJSCIA BETWEEN @DataWej AND @DataWyj) GROUP BY id_user) 

SET @duration = (SELECT RIGHT('00' + CAST((@durMinutes / 60) AS VARCHAR(2)),2) + ':' + RIGHT('00' + CAST((@durMinutes % 60) AS VARCHAR(2)), 2) + ':00') 
 
SELECT @duration as dupa
--, @dzien as adas


END
2
Guriel napisał(a):

Odpowiedzi na pewne pytania:
1.1) Czy obecnie używacie Stored Procedure?
1.2) Jak komunikować się z bazą danych? Znajomy powiedział, że sposób jaki teraz to zrobiłem:

SqlDataSource1.InsertCommand = "INSERT INTO dane (ID_USER)  VALUES ('" + DropDownList1.Text + "')";

jest sprzed 10ciu lat, a teraz stosuje się frameworki, prosiłbym jakis przyklad, bo nie wyobrazam sobie innej metody w tym momencie.

1.1 - Jeżeli projekt wykorzystuje logikę po stronie bazy to tak. Obecnie prowadzę projekt, który ma całą logikę w bazie ponad 1200 procedur, które się dublują, są cholernie długie oraz ciężkie do refaktoryzacji i ogólnie jak się je modyfikuje to się zbiera na wymioty. Dlatego w mojej opinii lepiej trzymać logikę nie po stronie bazy.
1.2 - Wykorzystuje się ORMy jak NHibernate (z dodatkową biblioteką FluentNHibernate) lub Entity Framework - poczytaj o tym. Dwa ten kod nie jest odporny na podstawowy atak na bazy danych jakim jest SQL Injection.

1

Dopiero co zaczynam swoją przygodę z C#, ADO.NET .NET, (póki co nierozumiem czym różnią się te trzy nazwy)

To ja podpowiem: C# to język programowania.

.NET to najogólniej mówiąc dwie rzeczy - zestaw klas, bibliotek i różnych tego typu rzeczy, z których możesz korzystać na przykład w języku C# (nie tylko - .NET pozwala na korzystanie z innych języków, np. F#), oraz - co też istotne - środowisko uruchomieniowe, czyli coś, co zapewnia, że twój program napisany w C# w ogóle będzie się uruchamiał.

ADO.NET to biblioteki dostępu do baz danych. I rzeczywiście wykorzystuje się obecnie raczej mechanizmy typu ORM - mapowanie relacyjno-obiektowe. W skrócie chodzi o to, że zamiast operować na rekordach bazy danych dostajesz obiekty, a ORM sam to tłumaczy na odpowiednie zapytania do bazy.

ASP.NET, w którym pracujesz, to zestaw bibliotek i szkielet tworzenia aplikacji internetowych. Pracujesz w bibliotekach o nazwie WebForms, ale ASP.NET oferuje jeszcze jedną możliwość - framework ASP.NET MVC, który obecnie jest standardem w tworzeniu aplikacji internetowych - ale działa w inny sposób niż WebForms, który opiera się na zdarzeniach.

Książki, które wspomniałeś na początku są dość stare - wystarczy powiedzieć, że obecną wersją Visual Studio jest wersja 2015, a obecną wersją języka C# - wersja 6.0. Kiedy skończysz ten projekt warto abyś w ramach swoje samorozwoju sięgnął po coś aktualnego.

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