Jak wykonać dzielenie wartości w komórkach w datagriview z polecenia składowanego SQL

0

Cześć. Mam kolejny problem bo czytam, przeglądam i jak na razie nie mogę znaleźć rozwiązania.
Mam program, który pobiera dane z Microsoft SQL poprzez procedurę składowaną EXEC. Procedura nie jest tworzona (brak dostępu), a od nowa za każdym razem wykonywana więc nie mam jak w poleceniu select wykonać odpowiednich działań, a musze podzielić wartości z odpowiednich kolumn (nieokreślona ilość wierszy) na minuty.
Jak wykonać dzielenie w DataGridView?

0

Jeśli dotychczas wstawiałeś do DataGridView Data Table, to przed Tobą trochę pracy. Oddziel sobie mentalnie zapytanie sql od kodu aplikacji. Stwórz klasę reprezentującą model danych zwracanych z sql, przemapuj wynik zapytania na model, używając np. Dappera, na koniec podepnij kolekcję modeli pod DataGridView. Klasa DateTime albo Timespan z C# ułatwi Ci wyjęcie szczegółów z wartości czasowej, czy co tam planujesz dzielić.

0

Wiem, że jeszcze dużo pracy przede mną. Myślałem, że jest jakieś łatwe rozwiązanie żeby podzielić wiersze z określonych kolumn.

0

Ładowanie DataTable do DataGridView to najprostsze możliwe rozwiązanie, które jest toporne, bo masz ograniczone możliwości manipulowania tymi danymi. Od biedy możesz przemapować dane na DataView i tam stworzyć nowe dane dla DataGridView.

Jeśli dopiero uczysz się programowania, to nie idź tą drogą i wybierz bardziej obiektowe podejście, gdzie chociażby debugowanie będzie prostsze.

1

Ja bym to zrobił w select. Tak wiem że chodzi o procedurę, ale jest to możliwe https://stackoverflow.com/questions/1492411/how-to-select-from-stored-procedure

0
Panczo napisał(a):

Ja bym to zrobił w select. Tak wiem że chodzi o procedurę, ale jest to możliwe https://stackoverflow.com/questions/1492411/how-to-select-from-stored-procedure

Jest możliwe, potwierdzam - działa ;). Teraz się zastanawiam jak zmienić datę w procedurze bo mam "@StartDate = N'2023-10-03', @EndDate = N'2023-10-03'," , a musze mięc Yesterday, last 7 days itd ehhh już zapomniałem jak to się robi a tym bardziej w tej procedurze

0

DateAdd:

  DateAdd(d,-1,getdate()) --yesterday
0
Panczo napisał(a):

DateAdd:

  DateAdd(d,-1,getdate()) --yesterday

Nie działa mam: @StartDate = DateAdd(d,-1,getdate()) i dostaje komunikat" incorrect syntax near ;d; "
Domyślam się że wcześniej trzeba zadeklarować zmienną poprzez DECLARE a później dla niej ustawić date i w EXEC wpisać tylko zmienną.
Ale nie wiem jak mam dodać drugą zmienną bo cały czas wywala błędy.

DECLARE @MyTableTyperr as table
(costam int, costam varchar(50))
Insert into @MyTableTyperr
DECLARE @dt datetime
Set @dt DATEADD(day,-1,getDate())
EXEC	[dbo].[REPO]
		@StartDate = @dt,
		@EndDate = @dt,
		@AssetID = '5',
Select * From @MyTableTyperr
1

Pmieszałeś, nie możesz zrobić deklaracji po insert

DECLARE @dt datetime
Set @dt  = DATEADD(day,-1,getDate())
DECLARE @MyTableTyperr as table
(costam int, costam varchar(50))

Insert into @MyTableTyperr
EXEC	[dbo].[REPO] @dt, @dt,'5'

Select * From @MyTableTyperr
0

Teoretycznie działa, ale wyświetla pustą tabele. Czy jest możliwe, że trzeba do tego wszystkiego ustawić odpowiedni format daty czy gdyby był nieodpowiedni to wyskoczyłby błąd?

1

a jaki typ maja parametry procedury REPO?

0
Panczo napisał(a):

a jaki typ maja parametry procedury REPO?

int i varchar (50)

0

To sprawdź czy nie zadziała tak:

EXEC	[dbo].[REPO] convert(vachar(10),@dt,121), convert(vachar(10),@dt,121),'5'
0
Panczo napisał(a):

To sprawdź czy nie zadziała tak:

EXEC	[dbo].[REPO] convert(vachar(10),@dt,121), convert(vachar(10),@dt,121),'5'

Zmęczony już tym jestem dzisiaj więc może coś źle robię, ale wstawiłem tak:
Exec [dbo].[REPO]
@StartDate = convert(varchar(10),@DT,121),
@EndDate = convert(varchar(10),@DT,121),

  • zabawa z nawiasami bezskutecznie wywala błędy incorect syntax near....
1

nie da się converta wstawić przy przekazaniu parametru do SP

musisz zmienić:

DECLARE @dt datetime
Set @dt  = convert(varchar(10),DateAdd(d,-1,getdate()),121)

0
Panczo napisał(a):

nie da się converta wstawić przy przekazaniu parametru do SP

musisz zmienić:

DECLARE @dt datetime
Set @dt  = convert(varchar(10),DateAdd(d,-1,getdate()),121)

Racja, przepraszam głupi błąd - zmęczenie.
Działa raczej dobrze, dokładnie sprawdzę jeszcze jutro i dam znać.
DZIĘKUJĘ bo sam bym nad tym siedział nie wiem ile czasu... - swoją drogą trochę się douczę ;)

Jeszcze mam jedno pytanie:). Jak uzyskać wynik z poprzedniego miesiąca? - Już mam :

DECLARE @dt DATETIME, @dk DATETIME
SET @dt = DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0)
SET @dk = DATEADD(mm, 1, @dt)

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