|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
[MySQL] Problema con inserimento date -- URGENTE!!!
Ho un problema un po' strano:
ho 2 applicazioni sviluppate sullo stesso DB MySQL. Una è un'applicazione Windows fatta in VB.NET, che deve girare solo su 3 pc destinati alla "gestione globale", e l'altra è un sito in Asp.net/vb. Quando devo inserire un record nella tabella Segnalazioni, la stessa identica query funziona senza problemi nell'applicazione windows, mentre non va nella pagina web. Ora, io trasformo la data nel formato aaaammgg, e quando lancio la query il risultato che viene fuori è una roba del genere: INSERT INTO Segnalazioni (descrizione, datainserimento, datasegnalazione) SELECT 'abcabc', NOW(), 20080301) La stringa è IDENTICA nei due programmi, ma da web non funziona. Connessione odbc per entrambi, tutto esattamente uguale. Perchè quel formato di data non va bene da una parte??? (ho provato a sostituirlo con NOW(), e la query gira, per cui non è la struttura della query il problema...) Dovrei riuscire da web a sostituire il 20080301 con "20080301", ma se metto la stringa DataSegnalaz= chr(39) & DataSegnalaz & Chr(39), me lo trasforma in '20080301', col singolo apice, e ovviamente non va bene!!!
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Ma datasegnalazione che tipo di dati e' nella tabella? Stringa oppure data?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
Quote:
Non posso convertirlo in stringa, perchè altrimenti mi complicherebbe non poco i filtri sulle varie ricerche
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Certo, certo, e' la scelta giusta, volevo solo capire se era stata scelta. Per inserire un campo data direttamente da statement SQL in mysql (e sqlserver) occorre pero' passare una stringa. Sara' il motore a fare il parsing della stringa e trasformare il valore in data prima di memorizzarlo. La tua prima istruzione dovrebbe essere scritta cosi': Quote:
Perche' in realta' questa scelta non si dovrebbe fare, sopratutto nelle applicazioni WEB. Occorrerebbe lavorare sempre con i parametri, per evitare il dannosissimo e sottostimato problema della SQL-Injection. Lavorando con i parametri ottieni anche che i dati da inserire per questa istruzione potrebbero rimanere nel loro fomato nativo .net, e non dovrai pensare tu a trasformarli nel formato analogo per il database che usi.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
Ed esattamente con i parametri come dovrebbe essere?
Perchè ho fatto un paio di tentativi, ma se gli passavo 20080201 o 01/03/2008 mi dava comunque errore (grazie per l'aiuto)
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Codice:
string sql=@"INSERT INTO Segnalazioni (descrizione, datainserimento,
datasegnalazione) VALUES (@p1, NOW(), @p2) ";
ISqlCommand pippo=connection.CreateCommand(sql);
pippo.AddParameter("@p1",stringaabcabc);
pippo.AddParameter("@p2",datachevoglio);
pippo.ExecuteNonQuery();
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Prova a passare 2008-02-01: con MySQL faccio così e non mi crea problemi.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
Grazie mille. Adesso provo
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
Anche con i parametri, il problema rimaneva...
Se gli passavo 20080301 mi inseriva a riga nella tabella lasciandomi vuoto il campo corrispondente (!!!), passandogli 2008-03-01 mi dava errore di conversione, ho provato qualche altro formato ma niente... Alla fine ho convertito i campi data in campi integer, la data viene passata col formato aaaammgg, e quando interrogo il db forzo una trasformazione del dato da integer a stringa nel formato "gg/mm/aaaa". Non sarà il massimo, ma è l'unico modo che ho trovato, visto che dovevo assolutamente terminare per oggi... Al massimo farò qualche altro tentativo nei prossimi giorni, se trovo una soluzione sostituirò il progetto.
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Con i parametri il problema non deve accadere.
Non dovevi passare una stringa '20030801' ma una vera e propria data, costruita in VB.net come preferito, tipo: Datetime dt=new DateTime(2003,08,01); (C#, non conosco la sintassi analoga VB.net) Passando dt come variabile sarebbe andato tutto a posto. La soluzione con interi va altrettanto bene, a patto che tu non debba mai chiederti la differenza tra 2 date. Sottrarre 2 interi cosi' ovviamente restituisce valori che non hanno senso. Sottrarre invece 2 campi in formato data restituisce su quasi tutti i DB la differenza in giorni fra le 2 date.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: May 2004
Città: Como (PDN)
Messaggi: 428
|
Credimi, è stato forse il primo tentativo che ho fatto.
Ma la query lasciava il campo corrispondente vuoto Ribadisco, la cosa che più mi lascia perplesso è che la stessa IDENTICA query sull'applicazione windows gira senza problemi, su asp.net no Ad ogni modo, se dovrò ottenere una differenza tra date, trasformerò i campi corrispondenti da codice e poi userò il datediff: un po' più lento, lo so, ma (per ora) è l'unica
__________________
Qualcuno qui dentro ritiene di essere l'illuminato, di avere la saggezza e che gli altri siano un branco di poveri idioti. Per questo se non è in grado di argomentare seriamente delle risposte, se non la pensi come lui o se provoca e gli rispondi fugge dal thread e ti mette in ignore list |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:13.




















