Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Scope del comando SET DATEFORMAT
martedì 06 febbraio 2007 - 08.57
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gmt
Profilo
| Junior Member
98
messaggi | Data Invio:
mar 6 feb 2007 - 08:57
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
5.625
messaggi | Data Invio:
mar 6 feb 2007 - 10:29
>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
98
messaggi | Data Invio:
mar 6 feb 2007 - 12:12
Cacchio.. se non ci fossi bisognerebbe inventarti!
Grazie
Torna su
Stanze Forum
Elenco Threads
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 !