Newsgroup: it.comp.lang.visual-basic
Titolo: problemi con datetime e sqlserver

Salve a tutti,
volevo esporvi un problema che mi sta facendo scervellare...anche
perchè non sono molto esperto di dot net e sqlserver....
in una form di ricerca ho tra i vari controlli due
datetimepicker..datainiziale e datafinale...
la mia stringa sql è=
SELECT Id_Preventivo, Id_Dipendente,
Id_Cliente,Id_Committente,N_Preventivo,
DataPreventivo,Descrizione,ImportoPreventivo,Esito,ImportoCommessa,N_Ordine,DataOrdine,ConsegnaContrattuale,DataChiamata,Cantiere,DaChiudere,DataScadenza
FROM Preventivi WHERE Id_Cliente LIKE '" + cliente + "' AND
Id_Committente LIKE '" + committente + "' AND DataPreventivo >=" +
datainiziale+ " AND DataPreventivo <=" + datafinale + " AND
ImportoPreventivo >=" + compresoda + " AND ImportoPreventivo <=" +
compresoa + " AND Esito LIKE '" + esito + "';
eseguendola mi da il seguente errore:
sintassi non corretta in prossimità di 0.00 che sarebbe l'ora di data
iniziale.
Perchè?

Il 27/06/2007, linus_torvalds ha detto :

Innanzitutto hai postato una cosa incomprensibile.
Per metà è sintassi TSql e per metà sono concatenazioni di VB.Net.
Se metti un breakpoint subito dopo la creazione della stringa, la 
copiincolli nel query analyzer e la esegui, capisci subito il problema.
Ad occhio, partirei dal dimensionamento di 'datainiziale'. Se sono i 
datetimepicker veri e propri, stai facendo una concatenazione 'strana'. 
Meglio prima convertire esplicitamente in stringa utilizzando un 
formato ISO per la data.
Ciao
Alberto
-- 
Karl Marx: Uno scrittore è produttivo non nella misura in cui produce 
idee, ma nella misura in cui arricchisce l'editore che pubblica le sue 
opere.

Che cosa è il query analizer??io non ce l'ho tra i tool di visual
studio 2005

 studio 2005
E' un tool di Sql-Server 7 o 2000.
Con Sql-server 2005 si usa la Sql-Server Management Studio o qualcosa 
del genere.
Se hai un Sql-Express, non saprei, ma mi auguro che esista la 
possibilità di testare una query senza dover avviare l'applicativo 
VB.Net.
Comunque in VS2005 io vedo i db e posso eseguire query facendo 'tasto 
destro'->'nuova query' sul db stesso...
Ciao
Alberto
-- 
Karl Marx: Le circostanze fanno l'uomo non meno di quanto l'uomo faccia 
le circostanze.

grazie dei consigli....
io sto lavorando con vs2005 e il sqlserver è quello integrato in
vs2005...
per quanto riguarda la query non posso fare come dici te perchè io
devo crearmi dinamicamente la query in base a che dati ho...
la query...senza la concatenazione di codice sql e c# è questa qui:
SELECT Id_Preventivo, Id_Dipendente, Id_Cliente,
Id_Committente,N_Preventivo,DataPreventivo,
Descrizione,ImportoPreventivo,Esito,ImportoCommessa,N_Ordine,DataOrdine,ConsegnaContrattuale,DataChiamata,Cantiere,DaChiudere,DataScadenza
FROM Preventivi WHERE Id_Cliente LIKE '%' AND Id_Committente LIKE '%'
AND DataPreventivo >= 27/06/2007 13.07.22 AND DataPreventivo <=
27/06/2007 13.07.22 AND ImportoPreventivo >=1 AND ImportoPreventivo
<=
2147483647
 AND Esito LIKE '%';
ma i parametri possono cambiare tranquillamente...il mio unico
problema è con il datetime...
a vedere il messaggio di errore che mi restituisce (sintassi non
corretta in prossimità di 13.07) non è che il motivo è perchè non ci
sono i secondi??

linus_torvalds ha usato la sua tastiera per scrivere :

Appunto.
Vedi che estraendo la query con un breakpoint, l'errore è palese?
I datetime in Sql-Server vanno racchiusi fra apicini.
Aggiungo che questa cosa funziona solo con utenti (di Sql-Server, non 
di windows) in italiano, mentre se tu formattassi le date in ISO 
('yyyymmdd hh:mm:ss.nnn') avresti il buon funzionamento con qualunque 
utente Sql.
Ciao
Alberto
-- 
Georges Pompidou: Un uomo di stato è un politico che dona se stesso al 
servizio della nazione. Un politico è un uomo di stato che pone la 
nazione al suo servizio.

Mettendo gli apicini l'errore diventa:
"La conversione del tipo di dati da char a datetime ha generato un
valore di tipo datetime non compreso nell'intervallo dei valori
consentiti."

linus_torvalds scriveva il 27/06/2007 :

Scusa, ma hai fatto anche la formattazione ISO che ti avevo detto?
Comunque, se ritieni di voler risolvere il problema, devi postare la 
query, altrimenti dobbiamo 'indovinare' cosa hai scritto...
Alberto
-- 
Fabio Fazio: Se siamo alleati come mai nei nostri bar si vende Coca 
Cola e nei bar americani non si vende l'amaretto di Saronno?

Scusami ma non sono molto pratico e ti ringrazio per la tua
pazienza....
questa è la mia stringa sql da codice:
sql = "SELECT
Id_Preventivo,Id_Dipendente,Id_Cliente,Id_Committente,N_Preventivo,DataPreventivo,Descrizione,
ImportoPreventivo,Esito,ImportoCommessa,N_Ordine,DataOrdine,ConsegnaContrattuale,DataChiamata,Cantiere,DaChiudere,DataScadenza
FROM Preventivi WHERE Id_Cliente LIKE '" + cliente + "' AND
Id_Committente LIKE '" + committente + "' AND DataPreventivo >= '" +
daDataVar.Date + "' AND DataPreventivo <= '" + aDataVar.Date + "' AND
ImportoPreventivo >='" + compresoda + "' AND ImportoPreventivo <=" +
compresoa + " AND Esito LIKE '" + esito + "';";
questa è la query estratta con un breakpoint:
SELECT
Id_Preventivo,Id_Dipendente,Id_Cliente,Id_Committente,N_Preventivo,DataPreventivo,
Descrizione,ImportoPreventivo,Esito,ImportoCommessa,N_Ordine,DataOrdine,ConsegnaContrattuale,DataChiamata,
Cantiere,DaChiudere,DataScadenza FROM Preventivi WHERE Id_Cliente LIKE
'%' AND Id_Committente LIKE '%' AND DataPreventivo >= '01/06/2007
0.00.00' AND DataPreventivo <= '15/06/2007 0.00.00' AND
ImportoPreventivo >='1' AND ImportoPreventivo <=
2147483647
 AND Esito
LIKE '%';
Ora devo formattare la data secondo il formato iso...ok...ma come??
perdona la mia ignoranza ma io sono pratico di java e oracle....
in oracle basta che trasforma la data in To_Char(data,'dd/mm/yyyy)
non si può fare anche in sqlserver??

 non si può fare anche in sqlserver??
Data.ToString("yyyyMMdd hh:mm:ss")
Ciao

 non si può fare anche in sqlserver??
Quella che hai scritto è una porcheria anche per Oracle, che sta in 
piedi se tirano quattro venti (ossia solo se c'è corrispondenza fra 
localizzazione italiana utente Oracle e localizzazione dell'utente NT).
Anche in Sql-Server può funzionare, ma non sempre.
Stavolta sei capitato in un caso che non funziona, così come poteva 
capitarti con Oracle.
Considerati fortunato. Pensa se avesse funzionato in sviluppo, e si 
fosse inchiodata in produzione dopo che avevi usato quella struttura in 
duecento punti del software.
Ciao
Alberto
-- 


 Karl Marx: Uno scrittore č produttivo non nella misura in cui produce 


 carattere "+", l'utilizzo di questo operatore è sconsigliato.
No, aspetta, sotto 
vb.net
 il + se non ricordo male è migliore di & perchè ti 
costringe a concatenare stringhe e non alla conversione implicita.
Ciao 

Anche in Sql-Server può funzionare, ma non sempre.
ma quello è un esempio ovviamente...la stringa di formattazione me la
ricavo dal locale dell'utente...

Nel suo scritto precedente, linus_torvalds ha sostenuto :

Appunto.
Quando si lavora con sintassi Sql (che sia un Sql di Sql-Server, 
Oracle, MySql, Firebird, Access, FoxPro, o quello che vuoi), le date 
vanno formattate in maniera INDIPENDENTE dal locale dell'utente...
Tu invece ti appoggi ai settings locali. Il che funziona per grazia 
ricevuta, cioè solo se c'è coincidenza perfetta fra le impostazioni 
locali NT e le impostazioni locali dell'utente dbms (che possono non 
coincidere, anzi, possono anche cambiare a runtime in corsa). Con quel 
To_Char che avevi postato, poi, sei in una situazione ancora più 
complessa, perchè usi una formattazione posizionale italiana ma ti 
esponi ai separatori, che possono differire.
Comunque, la tua risposta mi dà l'impressione che tu non abbia ben 
colto il punto...
Alberto
-- 
Friedrich Nietzsche: Un po' di salute ogni tanto è il miglior rimedio 
per l'ammalato.

 ha scritto nel messaggio 
news:46835679$0$4792$4faf...@reader4.news.tin.it...


 addition or string concatenation will occur. "
Ah, ok, esattamente come mi ricordavo.
Provare per credere
Dim s1 As String = "ciao" + 1
Dim s2 As String = "ciao" & 2
Dim s3 As String = 1 + "ciao"
Dim s4 As String = 1 & "ciao"
Quindi sono assolto dal processo per l'accusa di "impreciso e poco 
attendibile", si dovrebbe passare a quello di ingiuria  :)
Ciao

 addition or string concatenation will occur. "
Secondo me l'OP usa VB.Net...
Alberto
-- 
Thomas Fuller: Ci sono persone che sono state considerate coraggiose 
perchè avevano troppa paura per scappare.

 ha scritto nel messaggio 
news:4684b1b4$0$37207$4faf...@reader3.news.tin.it...
