Ordinamento su query che non funziona

venerdì 23 gennaio 2009 - 13.44

zseven Profilo | Senior Member

Ciao ragazzi,
scusate c'è una cosa che non riesco a far funzionare su una query:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

come vedete dovrebbe ordinarmela per data messaggio e orario messaggio decrescente, dove data messaggio è di questo formato aaaammgg e orario è hh.mm.ss.
Dico dovrebbe perchè in realtà me lo ordina solo per orario e non per data.

Sapete dirmi come mai?

Grazie atutti

alx_81 Profilo | Guru

>Ciao ragazzi,
Ciao!

>Dico dovrebbe perchè in realtà me lo ordina solo per orario e non per data.
Te la ordina per data CRESCENTE (poichè non hai specificato il DESC) e per ora decrescente..

Detto questo due cose importanti:

1) Perchè non usi un solo campo per la data/ora?

2) Fai attenzione a concatenare le stringhe in quel modo, come sempre puntualizzo questa cosa perchè così si è soggetti ad attacchi di tipo sql injection. Ti suggerisco di leggere questo articolo per capire come utilizzare strumenti alternativi e più sicuri, come le query parametriche o, se puoi, le stored procedure.
L'articolo è: http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx

>Grazie atutti
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

zseven Profilo | Senior Member

Ciao alx_81,
prima di tutto grazie per aver risposto e risolto il mio problema... che era davvero una scemenza :-D

PEr quanto riguarda l'sql injection ho sempre avuto difficoltà a capire come essere del tutto sicuro inq uesto senso.
Adesso per risolvere il problema dell'injection derivante da form utilizzo funzioni come queste:

Function FixSQL(stringa) stringa = Replace(stringa, "'", "''") stringa = Replace(stringa, "%", "[%]") stringa = Replace(stringa, "[", "[[]") stringa = Replace(stringa, "]", "[]]") stringa = Replace(stringa, "_", "[_]") stringa = Replace(stringa, "#", "[#]") FixSQL = stringa End function

Il progetto del quale ti sto parlando è realizzato in ASP 3.0 non .NET per il quale ho ancora i tempi un pò lunghi di realizzazione.
Pensavo che utilizzando questa funzione avevo risolto(per quanto è possibile) i rischi derivanti da sql inj, però tu adesso mi dici che la mia query è pericolosa.

Ti riferisci per caso al fatto che ho concatenato le varie righe con la "&_"?
Se il problema èq uesto, eliminandola semplicemente e scrivendo la query tutta di fila pensi che ho almeno aggiustato un pò il tiro?

Grazie mille come sempre.
Ciao Ciao

alx_81 Profilo | Guru

>Ti riferisci per caso al fatto che ho concatenato le varie righe
>con la "&_"?
>Se il problema èq uesto, eliminandola semplicemente e scrivendo
>la query tutta di fila pensi che ho almeno aggiustato un pò il
>tiro?
Non è l'a capo che non è sicura.. è la concatenazione in sè, che porta a dare la possibilità all'utente di inserire dell'sql pericoloso..
Con le replace come fai tu, sei più sicuro..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
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