Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Select su un campo data in SQL Server

147 views
Skip to first unread message

Valeria De Luca

unread,
May 28, 2006, 6:44:31 PM5/28/06
to
Ciao, ho un problema nella generazione di una select; devo ottenere una
stringa SELECT da passare ad un metodo, la mia query contiene però un
confronto di un campo DateTime nel DB

la variabile miaData contiene gg/mm/aaaa di tipo DateTime

(DB SQL Server)

con una stringa del tipo

"select XX from DB where Campo <=" + miaData

non vengono recuperati i campi correttamente

ho provato a fare

"select XX from DB where Campo <= '" + miaData + " ' "

ma non funziona

invertendo invece l'ordine, impostando quindi la data come mm/gg/aaaa

"select XX from DB where Campo <= '" + miaData + " ' "

funziona correttamente.... o quasi.... dato che non vengono recuperati i
campi della data odierna ma solo quelli fino alla miaData - 1


In sintesi: devo ottenere una stringa SQL (solo quella e non un Command)
come posso:

1) effettuare la select sul campo data corretto (<= miaData in formato
gg/mm/aaaa)
2) recuperare anche i records della miaData (e non solo fino a miaData - 1)

Grazie per l'aiuto

Andrea Zani

unread,
May 29, 2006, 3:05:59 AM5/29/06
to
Valeria De Luca <val...@nik.it> ha scritto:

> Ciao, ho un problema nella generazione di una select; devo ottenere
> una stringa SELECT da passare ad un metodo, la mia query contiene
> perň un confronto di un campo DateTime nel DB

Non fare mai query dirette costruendo interamente la select, ma usa i
parameter. Per esempio:

SqlCommand sqlComm= new sqlCommand("select XX from DB where Campo
<=@data",conn);
sqlComm.commandtype = commandtype.storedprocedure;
SqlParameter par = new SqlParameter("@data",SqlDbType.DateTime)
par.Value=DateTime.Parse(miadata);
sqlComm.parameters.add(par);
...

Ciao
--
AZ [Microsoft - .NET MVP]
Mia Home page: http://ciclismo.sitiasp.it
Asp.Net community: http://www.aspitalia.com
Il mio blog: http://blogs.aspitalia.com/az

Valeria De Luca

unread,
May 29, 2006, 4:19:38 AM5/29/06
to
Grazie per l'aiuto!

Ma fatto questo, come posso ottenere la mia stringa SQL da passare al
metodo??

Thanks

Valeria De Luca

unread,
May 29, 2006, 4:26:47 AM5/29/06
to
Non credo che sia applicabile questa soluzione :-(((

io non ho ancora la connessione al DB, sto lavorando su ua classe esterna
nella quale devo generare SOLO la query sulla base di alcuni parametri....
successivamente "darò in pasto" la stringa al un altro metodo.

Grazie

David

unread,
May 29, 2006, 4:55:02 AM5/29/06
to
Valeria De Luca ha scritto:

> Non credo che sia applicabile questa soluzione :-(((
Certo che è applicabile :-)

> io non ho ancora la connessione al DB, sto lavorando su ua classe esterna
> nella quale devo generare SOLO la query sulla base di alcuni parametri....
> successivamente "darò in pasto" la stringa al un altro metodo.

Non ti serve la connessione al DB: puoi ritornare la stringa Command SQL
"select XX from DB where Campo <= @MiaData" ed un elenco di parametri da
applicare a al Command.

Per il problema di MiaData - 1 credi ci sia un problema con gli orari: in
SQL Server le colonne sono DateTime e non esistino collonne di tipo Date
(only).

HTH,
David


Valeria De Luca

unread,
May 29, 2006, 6:25:46 AM5/29/06
to
Grazie per l'aiuto

quindi come sarebbe il command senza connessione???

SQLCommand cmd = new SQLCOmmand();

string qry = "...";
cmd.CommandText = qry;

cmd.Parameter.....


ed ora????

non devo fare Execute? non devo passare la connessione al command... come
ottengo la mia stringa??

Per quanto riguarda la data -1 non ho capito come risolvere il problema

David

unread,
May 29, 2006, 9:50:11 AM5/29/06
to
Ciao Valeria,

> quindi come sarebbe il command senza connessione???
Nessun command senza connessione; semplicemente al metodo devi passare la
stringa del comando SQL con @miaData ed una lista, array, quel che vuoi di
parametri da applicare poi al SqlCommand.

Tanto per cominciare le date a SQL Server si passano in formato ansi
"yyyymmdd hh:mm:ss.fff" altrimenti avrai sempre problemi in base alla lingua
utilizzata dall'utente...

A questo punto dimenticati quello che ti ho detto e ripeti con me: "Si
devono utilizzare i parametri!". Se usi i parametri, oltre a tante altre
beghe, risolvi anche il problema delle date.

> Per quanto riguarda la data -1 non ho capito come risolvere il problema

Nel tuo caso stai facendo una query di questo tipo:

select XX from DB where Campo <= @miaData

adesso se Campo (che č di tipo DateTime) vale 20060529 14:00:00.000 (c'č
l'ora!) e tu passi a @miaData 20060529 (senza ora) SQL Server assume
20060529 00:00:00.000 (con ora zero!) che č semplicemente piů piccolo del
Campo sul database.

E' per questo che non vedi i record del giorno @miaData. Hai provato ad
eseguire la tua query in Query Analizer?


Valeria De Luca

unread,
May 29, 2006, 12:10:45 PM5/29/06
to
Grazie per la risposta dettagliata, quindi per evitare di passare la data
nel formato yyyymmdd basta utilizzare i parametri? Perfetto!!

Solo che non ho ancora capito come utilizzare i parametri nel mio caso :-(((

io ho questa stringa

"select XX from DB where Campo <= @miaData"

a questo punto come aggiungo il parametro (ti ho postato un esempio nel mio
post precedente)


> semplicemente al metodo devi passare la
> stringa del comando SQL con @miaData ed una lista, array, quel che vuoi di
> parametri da applicare poi al SqlCommand.

Il metodo si aspetta una stringa SQL completa ( select XX from DB where
Campo <= 29/05/2006 ), io invece devo "costruire" la stringa nel formato
corretto... potresti spiegarmi come fare??

Grazie ancora!

VeroToad

unread,
May 30, 2006, 4:04:51 AM5/30/06
to
Il Mon, 29 May 2006 16:10:45 GMT, Valeria De Luca ha scritto:

> Grazie per la risposta dettagliata, quindi per evitare di passare la data
> nel formato yyyymmdd basta utilizzare i parametri? Perfetto!!
>
> Solo che non ho ancora capito come utilizzare i parametri nel mio caso :-(((

Guarda questo esempio:

Dim cmd As New SqlCommand()
cmd.CommandType = CommandType.Text
cmd.Connection = conn
cmd.CommandText = "SELECT MyField FROM MyTable WHERE AnotherField<=
@MyDate"

Dim DataScelta As New SqlParameter("@MyDate", SqlDbType.DateTime)
DataScelta.Value = MyDateValue
cmd.Parameters.Add(DataScelta)

MyDateValue č il tuo valore di data che viene cosě passato ad ogni
esecuzione del codice.

Spero ti sia utile.
Ciao!

--
VeroToad(2006) from Milan
My blog: http://blogs.dotnethell.it/VeroToad

David

unread,
May 30, 2006, 8:30:54 AM5/30/06
to
Valeria De Luca ha scritto:
> Il metodo si aspetta una stringa SQL completa ( select XX from DB where
> Campo <= 29/05/2006 ), io invece devo "costruire" la stringa nel formato
> corretto... potresti spiegarmi come fare??

Devi modificare il metodo... e deve aspettarsi una stringa SQL ed un elenco
di parametri.


VeroToad

unread,
May 30, 2006, 8:50:17 AM5/30/06
to
Il Tue, 30 May 2006 10:04:51 +0200, VeroToad ha scritto:

> Guarda questo esempio:
[cut]

Magari non guardarlo :-)
... non avevo visto che avevi un metodo già pronto.

rik

unread,
Jun 1, 2006, 5:41:43 PM6/1/06
to
Ma alla fine la data nel formato yyyymmdd hh... viene chiamata in formato
ANSI o ISO??
0 new messages