Data come parametro

giovedì 14 febbraio 2013 - 12.58

jjchuck Profilo | Senior Member

buon giorno
sono qui con un problema che sicuramente saprete risolvere ...
ho una textbox (in verità due) con un calendario come popup e una query di selezione con il campo data come parametro
....
dataDA = New SqlParameter()
dataDA.ParameterName = "@inizio"
dataDA.Value = txtDateDa.Text.ToString

mycommand.command.text=...WHERE Data BETWEEN '@inizio' AND '@fine'

la segnalazione d'errore dice:

Conversione non riuscita durante la conversione di una stringa di caratteri nel tipo di dati datetime

non capisco come debbo passare il parametro ...come convertirlo

...inoltre il calendario mi restituisce il formato mm/gg/anno anzichè il nostro

ho provato vari metodi ma ottengo sempre errori che hanno a che fare con questa dannata conversione...

help

alx_81 Profilo | Guru

>buon giorno
ciao

>non capisco come debbo passare il parametro ...come convertirlo
perchè mai lo dovresti convertire? passa direttamente il datetime no?
usa il metodo AddWithValue della collection parameters:
http://msdn.microsoft.com/it-it/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx

>...inoltre il calendario mi restituisce il formato mm/gg/anno anzichè il nostro
quello non conta, tu devi portare quel valore tornato dal calendario dentro un datetime, il cui tipo poi è quello da passare a sql, non la stringa.
Ovviamente il web server e il sql dovrebbero avere le impostazioni di lingua identiche.


Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

almeno a s.valentino qlcuno mi risponde:)

ho scritto:

dataDA = New SqlParameter()
dataDA.SqlDbType = SqlDbType.DateTime

...
MyCommand.Parameters.AddWithValue("@dataDA", txtDateDa.Text)

però non è corretto perchè dice sempre
Conversione non riuscita durante la conversione di una stringa di caratteri nel tipo di dati datetime

alx_81 Profilo | Guru

>però non è corretto perchè dice sempre
>Conversione non riuscita durante la conversione di una stringa
>di caratteri nel tipo di dati datetime
stai continuando a passare la stringa. Fai un Datetime.Parse del testo per tornare un datetime, poi passa quello.
Non devi passare stringhe se il tipo di dato è data.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

Stringa non riconosciuta come valore DateTime valido
MyCommand.Parameters.AddWithValue("@dataA", DateTime.Parse(txtDateA.Text))

ma che vuole

alx_81 Profilo | Guru

>Stringa non riconosciuta come valore DateTime valido
>MyCommand.Parameters.AddWithValue("@dataA", DateTime.Parse(txtDateA.Text))
>ma che vuole
devi fare con calma, debuggare e capire..
prima di tutto, scaricati LinqPad che ti aiuta a fare questo tipo di operazioncine.
Poi vedi se il datetime.parse torna una data o se già lui dà l'errore PRIMA di passarlo alla addwithValue, potrebbe essere necessario specificare il formato di conversione.
Quale forma ha la data letta dal calendario precisamente?

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

mm/gg/anno

...provo a vedere se l'errore cè prima come dici...

cmq se seleziono la data da sqlmanagementstudio ottengo anno/mm/gg.ora...tuttavia se nel filtro inserisco '31/12/2012' mi restituisce la data corretta

ok questa che ho detto è na ....ta

jjchuck Profilo | Senior Member

MsgBox(DateTime.Parse(txtDateA.Text))
System.FormatException: Stringa non riconosciuta come valore DateTime valido

-non restituisce una data...

-la stringa sql è corretta

-il calendario che uso con jQuery non c'entra nulla...

Mi pare che si tratti di convertire il valore della textbox in un formato datetime prima di aggiungere il parametro alla collection...


alx_81 Profilo | Guru

>Mi pare che si tratti di convertire il valore della textbox in
>un formato datetime prima di aggiungere il parametro alla collection...
se tu sai che il calendario ti torna la data in formato en-US (mm/gg/aaaa hh:mm:ss) allora puoi applicare questo:

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

e poi usare myDateTime
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

si stavo vedendo un post proprio ora sempre nel nostro meraviglioso forum:)
...si a parte l'ora che non è restituita dal calendario il formato è quello...

ma dove devo inserire quel codice (che debbo convertire in vb)?...pare brutto brutto...ma spero che risolva

alx_81 Profilo | Guru

>...si a parte l'ora che non è restituita dal calendario il formato è quello...
>ma dove devo inserire quel codice (che debbo convertire in vb)?...pare
>brutto brutto...ma spero che risolva
brutto brutto? è preso dalla doc
in vb è molto simile..

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

myguru ora provo e ti faccio sapere..spero solo che gli schizzi di sangue non arrivino da te

jjchuck Profilo | Senior Member

Dim Culture As IFormatProvider = New CultureInfo("en-US", True)
Dim mydatetimevalue As String = txtDateDa.Text
Dim myDateTime As DateTime = DateTime.Parse(mydatetimevalue, Culture, DateTimeStyles.NoCurrentDateDefault)

questo è quello che scrivo per una textbox...ora vediamo che succede

aspetta ma appendo (i salami...) il parametro come prima

MyCommand.Parameters.AddWithValue("@dataDA", txtDateDa.Text)

oppure ora la mia variabile è myDateTime ?

alx_81 Profilo | Guru

>oppure ora la mia variabile è myDateTime ?
secondo te? Dai su provaci a capirla

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

non mi viene...sono cotto...
provo a ridurre l'interrogazione ai soli parametri data e la faccio su quella palla di Northwind...cosi ti posto il codice e se avrai pietà di
me magari gli darai un'occhiata...

ciao

ps..vacci piano stasera ...pensa a me che resterò solo col mio pc :(

alx_81 Profilo | Guru

>ps..vacci piano stasera ...pensa a me che resterò solo col mio pc :(
stasera niente per me, riposo non amiamo San Valentino noi.. siamo "orgogliosamente atipici"
comunque passa la datetime, non la stringa.

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

mi sento un idiota...molti altri hanno avuto lo stesso problema ma io non ne vengo fuori...sembra che applichi male le varie soluzioni..

ti giro il codice che punta a Northwind...intanto continuo a cercare di capire cercando di non deprimermi
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

alx_81 Profilo | Guru

>mi sento un idiota...molti altri hanno avuto lo stesso problema
>ma io non ne vengo fuori...sembra che applichi male le varie soluzioni..
allora, dal codice che vedo proprio non hai capito certe cose.. te l'ho rifatto e commentato (occhio, vedi se compila, ho usato un notepad). Si tratta solo della prima sub:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

invece che mettere nella sub tutta la pletora di codice, fai un metodo che ti torna il reader (function) e che accetta due params stringa (le tue text da leggere) in modo da slegare la gestione della vista html dal source. Molto più comodo, modulare e leggibile.

prova così.
ciao
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

ciao
grazie per la prontezza

ho sostituito using con Dim (dava un errore di fieldcount....ecc)
cmq
Conversione non riuscita durante la conversione di una stringa di caratteri in una data o ora

grazie per i commenti ...scrivere codice leggibile non è per tutti...sei un mito

tuttavia questo benedetto errore non se ne va...

alx_81 Profilo | Guru

>ho sostituito using con Dim (dava un errore di fieldcount....ecc)
no no aspetta.. Using è importantissimo eh.. magari è errata la sintassi, ma utilizzalo..

>cmq
>Conversione non riuscita durante la conversione di una stringa
>di caratteri in una data o ora
eh allora non ti sta arrivando la stringa in en-us. Fai un bel debug e vai a vedere cosa c'è DI PRECISO in quelle stringhe di testo.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

allo using penso dopo...sono sicuro che è importante (meno righe piu risultati...come mi insegni)

cmq
msgbox( mydatetime) restituisce esattamente
01/01/1998
...cioè quello che legge nella textbox ...significa che non è in formato datetime giusto?

alx_81 Profilo | Guru

>...cioè quello che legge nella textbox ...significa che non è
>in formato datetime giusto?
prova una data che dà dubbi
tipo 25 febbraio.. così vediamo dove mette il 25

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

non serve...in effetti se è 01/02/1998 restituisce 02/01/1998

...quindi?

se faccio il bastardo come dici il msgbox nemmeno appare e l'errore è proprio su
Dim myDateTime As DateTime = DateTime.Parse(txtDateDa.Text, Culture, DateTimeStyles.NoCurrentDateDefault)

alx_81 Profilo | Guru

>non serve...in effetti se è 01/02/1998 restituisce 02/01/1998
serve per vedere se dà errore la conversione. 1 e 2 sono valori sempre ammissibili in ogni posizione, mentre il 25 ad esempio, non può stare nel mese non trovi?
puoi per cortesia dirmi, se selezioni il 25 febbraio, che cosa ti torna la stringa dal calendario?

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

vorrei ma il msgbox nemmeno mi compare se scrivo 25/02/1998...
Debug.WriteLine(myDateTime)

dove leggo questo...(quanto era bello debug.print sulla finestra immediata)

alx_81 Profilo | Guru

>vorrei ma il msgbox nemmeno mi compare se scrivo 25/02/1998...
allora vedi che c'è un problema? devi cercare di capire cosa sta succedendo e perchè si blocca, cerca di fare debug per bene.
Intanto preparo un semplicissimo esempio in vbnet
che datetime picker usi?

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

non uso un calendario...nell'esempio che ti ho postato sul caricamento della pagina attribuisco 01/01/1999 alla textbox...(per semplificare)

il calendario che allego è quello che uso nel sito...

alx_81 Profilo | Guru

>non uso un calendario...nell'esempio che ti ho postato sul caricamento
>della pagina attribuisco 01/01/1999 alla textbox...(per semplificare)
questo è un semplicissimo progettino
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

grazie per la pazienza...ma lo fai per uno che si impegna...anche se non sono un missile...cmq

da errore dalla master page...(ma non è questo il problema)...

cosi ho incollato il codice in un altra default che non eredita la masterpage

ho inserito in entrambe le textbox 28/02/2012 ottenendo:
EN FORMATO PASSATO NON VALIDO
ITA DATA IN LOCALE: 28/02/2012 0.00.00

...significa che debbo inserire IT nella cultureinfo ?

alx_81 Profilo | Guru

>grazie per la pazienza...ma lo fai per uno che si impegna...anche
>se non sono un missile...cmq
se non volessi non risponderei, tranquillo, lo faccio volentieri

>ho inserito in entrambe le textbox 28/02/2012 ottenendo:
>EN FORMATO PASSATO NON VALIDO
>ITA DATA IN LOCALE: 28/02/2012 0.00.00
>...significa che debbo inserire IT nella cultureinfo ?
significa che il campo di testo EN accetta solo date nel formato mm/gg/aaaa e che l'altro accetta solo gg/mm/aaaa.
Quindi tu devi capire, se userai un calendario o un controllo che prevede la scelta di una data, in che modo ti risponde.
Se ti risponde in formato EN, devi usare la culture EN che ti serve per far andare la parse e ottenere quel datetime che poi passerai al db.

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
ho sostituito nell'esempio che hai fatto culture info IT... ma sempre errore
ho capito quel che devo fare...ma non capisco perchè qull'esempio ora non giri proprio...
...poi non rompo piu ma puoi dirmi se a te funziona...

jjchuck Profilo | Senior Member

Where = Where & " WHERE OrderDate BETWEEN " & "'" & txtDateDa.Text & "'" & " and " & "'" & txtDateA.Text & "'"

costringi un tuo discepolo a questo...

come potrai dormire la notte ?

alx_81 Profilo | Guru

>Where = Where & " WHERE OrderDate BETWEEN " & "'" & txtDateDa.Text
>& "'" & " and " & "'" & txtDateA.Text & "'"
ti darebbe più problemi che altro..
comunque, mi dici che non va, dove si ferma? quando provi a fare la parse? Che ne dici di zipparmi il progettino e mandarmelo?
Perchè sinceramente mi sembra che giriamo attorno a una cosa che non riesco a vedere.. ma sei sicuro che gli arrivino le date corrette?


Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

ti allego quello che ci siamo scambiati (il mio orrore prevede una decina di parametri...ma non è il cuore del problema)
ed in piu il calendarietto che mi piaceva tanto...

Non capisco e forse non ne sono in grado...

alx_81 Profilo | Guru

>ti allego quello che ci siamo scambiati (il mio orrore prevede
>una decina di parametri...ma non è il cuore del problema)
>ed in piu il calendarietto che mi piaceva tanto...
dunque, la mia macchina è in inglese, metto en-us, carica le date e compone il comando..
Non capisco quale sia il problema..
Come ti dicevo, dipende sempre da che impostazioni hai sul tuo northwind.. Dove è installato? è su un server? è sulla tua macchina?
se tu hai tutto in italiano:
- devi controllare in che formato torna la data il calendario (a me torna nella forma mm/gg/aaaa)
- una volta che hai visto di che formato è, allora devi fare parsing della stringa in quel formato (per me en-us, visto che il cal torna en-us)
- una volta che hai le date in tipo DATETIME allora le passi al comando del db

ho trovato un problema facendo debug (mi chiedo se l'hai fatto con i dovuti breakpoint) e sono le apici prima e dopo i param:
"between '@inizio' and '@fine' " --> non va bene! non devi trattarle come stringhe! sono date, ci pensa ado.net a fare la conversione dovuta eventuale.

Io di errori non ne ho..
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

northwind è in italiano...

il calendario mi restituisce mm/gg/anno...

percui debbo semplicemente convertire il calendario nel formato ITA

cmq se inserisco le date a mano in gg/mm/anno...funziona !!! ERANO GLI APICI....

Giuro su mia madre...forse non basta...sul mio gingillo che avevo già provato a toglierli...non te lo dico per far bella figura ma
perchè ora ho la certezza matematica grazie al calcolo differenziale che sono un imbecille

grazie tanto...ma ognuno ha i suoi limiti

grazie ancora
passerò un weekend piu sereno

Ciao...sei umile e nello stesso tempo un grande....se tutti fossero come te probabilmente farei il batterista professionista in questo mondo di superman :)

alx_81 Profilo | Guru

>Ciao...sei umile e nello stesso tempo un grande....se tutti fossero
>come te probabilmente farei il batterista professionista in questo
>mondo di superman :)
grazie, posso twittarla? è una bella cosa da sentirsi dire..

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

jjchuck Profilo | Senior Member

absolutely yes...

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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5