andrea.tosato86 ha scritto:
Ciao,
Per il totale dei giorni, come già avevi fatto, puoi mettere un +1. Questo perchè hai bisogno di considerare gli estremi. La modifica puoi farla sulla query.
Per richiamare il codice via SQL invece ci sono 2 alternative per questo caso:
1) inserisci il codice in una stored procedure con i 3 parametri in ingresso: Dal, Al, CF
2) inserisci il codice in una Table-function che è molto simile alla stored procedure ma ti consente di riutilizzare la query all'interno di altri JOIN o sintassi SQL.
Richiamare una stored procedure, ho preso un esempio con DataSet:
'Setup SQL Command
Dim CMD as new sqlCommand("StoredProcedureName")
CMD.parameters("@Parameter1", sqlDBType.Int).value = Param_1_value
Dim connection As New SqlConnection(connectionString)
CMD.Connection = connection
CMD.CommandType = CommandType.StoredProcedure
Dim adapter As New SqlDataAdapter(CMD)
adapter.SelectCommand.CommandTimeout = 300
'Fill the dataset
Dim DS as DataSet
adapter.Fill(ds)
connection.Close()
'Now, read through your data:
For Each DR as DataRow in DS.Tables(0).rows
Msgbox("The value in Column ""ColumnName1"": " & cstr(DR("ColumnName1")))
next
No Andrea non funziona!! Il codice sono riuscito a "convertirlo così" ed è ok:
Dim a As Date = Date.Parse(TextBox2.Text)
Dim b As Date = Date.Parse(TextBox3.Text)
Dim source2 As String = WebConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
Dim sql2 As String = "SELECT IIF(Dal > @Dal, Dal, @Dal) as FinestraRicercaDal, IIF(Al < @Al, Al, @Al) as FinestraRicercaAl,Dal, Al,DATEDIFF(day, IIF(Dal > @Dal, Dal, @Dal), IIF(Al < @Al, Al, @Al)) as Total FROM Tab1 WHERE Dal BETWEEN @Dal AND @Al OR Al BETWEEN @Dal AND @Al"
Dim conn2 As New SqlConnection(source2)
conn2.Open()
Dim cmd2 As New SqlCommand(sql2, conn2)
cmd2.Parameters.AddWithValue("@Codfisc", Me.GridView1.SelectedRow.Cells(8).Text)
cmd2.Parameters.AddWithValue("@Dal", a)
cmd2.Parameters.AddWithValue("@Al", b)
Dim dr2 As SqlDataReader
dr2 = cmd2.ExecuteReader()
While dr2.Read()
TextBox4.Text = dr2("Total") + 1.ToString()
If IsDBNull(dr2("Total")) Then
TextBox4.Text = "0"
End If
End While
conn2.Close()
Non riesco a creare con SQL Fiddle il link prova tu inserendo questo codice:
CREATE TABLE [dbo].[Esempio](
[Id] [int] NOT NULL,
[CodiceFiscale] [nvarchar](50) NULL,
[Dal] [datetime] NULL,
[Al] [datetime] NULL,
CONSTRAINT [PK_Esempio] PRIMARY KEY CLUSTERED
(
[Id] ASC
))
GO
INSERT INTO Esempio(Id, CodiceFiscale, Dal, Al)
VALUES
(1, 'ITCCCCC', '2017-02-01T00:00:00', '2017-02-13T00:00:00')
(2, 'ITCCCCC', '2017-02-01T00:00:00', '2017-02-13T00:00:00')
DECLARE @RicercaDal AS DATETIME, @RicercaAl AS DATETIME
SET @RicercaDal = '2017-01-01'
SET @RicercaAl = '2017-04-10'
/*
SELECT Al FineFerie, @Al Ricerca, IIF(Al < @Al, Al, @Al)
FROM Esempio
WHERE Dal BETWEEN @Dal AND @Al
OR Al BETWEEN @Dal AND @Al
*/
SELECT IIF(Dal > @RicercaDal, Dal, @RicercaDal) FinestraRicercaDal,
IIF(Al < @RicercaAl, Al, @RicercaAl) FinestraRicercaAl,
Dal, Al,
DATEDIFF(day, IIF(Dal > @RicercaDal, Dal, @RicercaDal), IIF(Al < @RicercaAl, Al, @RicercaAl)) DIFFERENZA
FROM Esempio
WHERE Dal BETWEEN @RicercaDal AND @RicercaAl
OR Al BETWEEN @RicercaDal AND @RicercaAl
Il totale mi da 12 non va bene!! Non fa la somma dei giorni...
Modificato da MarkRoss il 14 agosto 2017 16.43 -