Scope del comando SET DATEFORMAT

martedì 06 febbraio 2007 - 08.57

gmt Profilo | Junior Member

Spero che sia il forum giusto, dato che la domanda è a cavallo tra questo e ASP.NET 2.0
Riassumo:
pagine aspx, database SQL Server 2005 Inglese..

codice con il quale richiamo una funzione SQL Server (le date di cpDalGiorno e cpAlGiorno sono dd/mm/yyyy)
---------------------------------------------------------------------------------------------------------

Dim pdalgg As String = cpDalGiorno.VisibleDate.ToString("dd/MM/yyyy") & " 00:00:00.000"
Dim palgg As String = cpAlGiorno.VisibleDate.ToString("dd/MM/yyyy") & " 23:59:59.997"

conn.Open()
cmd.CommandType = CommandType.Text
cmd.Connection = conn

cmd.CommandText = "SELECT dbo.func_nsc_CalcolaImporti('" + pdalgg + "','" + palgg + "'," + pfkidmedico.ToString() + ",'R','T')"


---------------------------------------------------------------------------------------------------------

Codice della Funzione

....
ALTER FUNCTION [dbo].[func_nsc_CalcolaImporti]
(
-- Add the parameters for the function here
@DALGG datetime, -- Data di partenza per il calcolo
@ALGG datetime, -- Data di fine per il calcolo
@FKIDMEDICO int, -- Id del medico su cui effettuare il calcolo
@TIPO char(1), -- Tipologia di calcolo (T - Tutto; R - Solo Ricevute; S - Solo Sospeso)
@PAGATO char(1) -- Tipo pagamento (T - Tutto; P - Pagato; N - Non Pagato)
)
RETURNS money
AS
BEGIN
-- Declare the return variable here
DECLARE @IMPORTOTOTALE money
DECLARE @IMPORTOTEMP money

SET @IMPORTOTOTALE = 0
SET @IMPORTOTEMP = 0

IF (@TIPO = 'R') AND (@PAGATO = 'T')
BEGIN
select @IMPORTOTEMP = sum(uni_importo)
from unitatemp inner join ricevute
on unitatemp.uni_fkidricevuta=ricevute.ric_idricevuta
where
uni_fkidmedico=@FKIDMEDICO AND
ric_data >= CONVERT(DATETIME, @DALGG, 105) AND
ric_data <= CONVERT(DATETIME, @ALGG, 105)
END

.....
-- Return the result of the function
RETURN @IMPORTOTOTALE

END

-------------------------

Non funziona! Devo fare SET DATEFORMAT dmy prima di chiamare la funzione dalla pagina aspx.. perchè? (Il server è in inglese)
In tutte le altre pagine uso allo stesso modo i filtri.. e funzionano !!.. se chiamo funzioni o SP devo effettuare il SET DATEFORMAT dmy, come mai ?

Seconda domanda ogni volta che apro la connessione e chiamo la funzione devo effettuare la SET DATEFORMAT, giusto ? Non è possibile dirlo una sola volta ? Premetto che apro la connessione, chiamo la funzione e chiudo ogni volta.

Grazie

lbenaglia Profilo | Guru

>Spero che sia il forum giusto, dato che la domanda è a cavallo
>tra questo e ASP.NET 2.0
>Riassumo:
>pagine aspx, database SQL Server 2005 Inglese..
>
>codice con il quale richiamo una funzione SQL Server (le date
>di cpDalGiorno e cpAlGiorno sono dd/mm/yyyy)
>---------------------------------------------------------------------------------------------------------
>
>Dim pdalgg As String = cpDalGiorno.VisibleDate.ToString("dd/MM/yyyy")
>& " 00:00:00.000"
>Dim palgg As String = cpAlGiorno.VisibleDate.ToString("dd/MM/yyyy")
>& " 23:59:59.997"
>
> conn.Open()
> cmd.CommandType = CommandType.Text
> cmd.Connection = conn
>
>cmd.CommandText = "SELECT dbo.func_nsc_CalcolaImporti('" + pdalgg
>+ "','" + palgg + "'," + pfkidmedico.ToString() + ",'R','T')"

Ciao gmt,

in SQL Server il formato con il quale vengono gestite le date è quello associato alla login che stai utilizzando per connetterti all'istanza. Se la login ha di default la lingua inglese, erediterà le formattazioni di valuta, di data ed i separatori decimali e delle migliaia propri di questa lingua.
Ora, se intendi svincolarti completamente dai formati internazionali utilizzati per formattare le date, utilizza il formato ISO 'YYYYMMDD' senza alcun separatore; SQL Server effettuerà un cast implicito della stringa in datetime o smalldatetime (in base al data type della variabile/colonna al quale la stringa fa riferimento).

>Non funziona! Devo fare SET DATEFORMAT dmy prima di chiamare
>la funzione dalla pagina aspx.. perchè? (Il server è in inglese)
>In tutte le altre pagine uso allo stesso modo i filtri.. e funzionano
>!!.. se chiamo funzioni o SP devo effettuare il SET DATEFORMAT
>dmy, come mai ?
Lascia perdere, utilizza lo standard ISO e ti svincolerai completamente dai formati internazionali.

>Seconda domanda ogni volta che apro la connessione e chiamo la
>funzione devo effettuare la SET DATEFORMAT, giusto ? Non è possibile
>dirlo una sola volta ? Premetto che apro la connessione, chiamo
>la funzione e chiudo ogni volta.
No, lo scope di questa impostazione è a livello di connessione, se la chiudi è ovvio che dovrai reimpostarla.
Una brutta soluzione consiste nel modificare il formato data o la lingua di default associate alla login che utilizzi per connetterti all'istanza; la soluzione definitiva consiste nell'utilizzare il formato ISO.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

gmt Profilo | Junior Member

Cacchio.. se non ci fossi bisognerebbe inventarti!
Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5