...ancora problemi con la conversione delle date.....

giovedì 18 novembre 2010 - 13.55

mauri1961 Profilo | Senior Member

Pensavo di avere risolto il problema della conversione delle date su un sqlserver remoto in lingua inglese e invece ho ancora problemi.

l'errore:
conversion failed after converting date and/or time from character string.

data in textbox gg/mm/aaaa
data su db yyyy-mm-gg

Questo errore mi compariva in sede di aggiornamento su una data selecteddate.tostring

Grazie al Vs. aiuto avevo risolto aggiungendo (yyyymmdd). Ora però ho dovuto levare quel tipo di data (non piaceva il calendarietto) e ho un textbox (in realtà sono tre) con la data definita comunica.text

Risultato...di nuovo lo stesso errore.

Premetto che mi è stato consigliato di cambiare la lingua su sqlserver ma avendo un'altra applicazione che necessita di tale lingua temo di creare ancora più danni.

Nel dettaglio ecco le istruzioni incriminate:


strsql = "insert into notifiche_01(not_comunicazione, not_opera, not_indirizzo, not_localita, not_committente, not_comm_cf, not_responsabile, not_resp_cf, not_coord1, not_cor1_cf, not_inizio, not_fine, not_impresa, not_impresa_noniscritta, not_impr_cf, not_comune, not_importo)" & _
"values ('" & comunica.Text & "', '" & ubicazione.Text & "', '" & indirizzo.Text & "', '" & comune.SelectedValue & "', '" & committente.Text & "', '" & comm_cf.Text & "', '" & responsabile.Text & "', '" & resp_cf.Text & "', '" & coordinatore.Text & "', '" & coord_cf.Text & "', '" & dataini.Text & "', '" & datafin.Text & "', '" & impresa.SelectedValue & "', '" & impresanoniscritta.Text & "', '" & partitaiva.Text & "', '" & comunesede.Text & "', '" & CInt(importo.Text) & "')"

stessa cosa per l'update...

Grazie....

Maurizio

alx_81 Profilo | Guru

>Premetto che mi è stato consigliato di cambiare la lingua su
>sqlserver ma avendo un'altra applicazione che necessita di tale
>lingua temo di creare ancora più danni.
no... non è un rimedio

>stessa cosa per l'update...
prendi il text e usa la DateTime.ParseExact, definendo nel secondo parametro il formato che ti aspetti in lettura.
Ulteriori info qui:
http://msdn.microsoft.com/it-it/library/w2sa9yss(v=VS.80).aspx

>Grazie....
di nulla!

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

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

mauri1961 Profilo | Senior Member

quindi il campo text (es. comunica.text) lo devo convertire con la datetime.parseexact da gg/mm/aaaa a yyyy-mm-dd come nel database e devo mettere l'istruzione a precedere l'insert o l'update?

Ciao, Maurizio

alx_81 Profilo | Guru

>quindi il campo text (es. comunica.text) lo devo convertire con
>la datetime.parseexact da gg/mm/aaaa a yyyy-mm-dd come nel database
quello che vedi nel database è solo un formato, uno stile.. definito dalla culture che hai in base al client che legge il dato.
Con la ParseExact leggi il testo dalla textbox in un modo che accetti solo tu (ad esempio gg/mm/aaaa) e quindi il secondo parametro sarà "dd/mm/yyyy" e se il formato non viene correttamente letto, lanci un'eccezione per gestire l'errore.
Una volta letto il campo in maniera corretta, utilizza le query parametriche:

sql = "INSERT INTO Tabella (campo1, campo2) VALUES (@param1, @param2)";

e poi nell'oggetto command che gestisce il comando aggiungi i parametri con l'addwithvalue:

cmd.Parameters.AddWithValue("@param1", campo_data_confertito);

e poi fai un bell'ExecuteNonQuery().


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

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

mauri1961 Profilo | Senior Member

mi scuso per non aver risposto prima, ma da ieri sono stato impegnato in altre problematiche e solo ora sono riuscito a mettere le mani sul codice.

Ho cercato di fare quanto suggerito, penso di avere capito il problema ma mi segnala alcuni errori in compilazione, mi scuso in anticipo perchè probabilmente gli errori sono dovuti alla mia scarsa pratica.

Questo è il codice che riguarda la parte di insert:

If operazione.Text = "INSERIMENTO" Then
Dim datestring As String
Dim result As Date
result = "yyyy-mm-dd"
datestring = comunica.Text
Dim provider As Cultureinfo = Cultureinfo.Invariantculture

DateTime.ParseExact(datestring, result, provider)

Dim datestring2 As String
Dim result2 As Date
result2 = "yyyy-mm-dd"
datestring2 = dataini.Text

DateTime.ParseExact(datestring2, result2, provider)

Dim datestring3 As String
Dim result3 As Date
result3 = "yyyy-mm-dd"
datestring3 = datafin.Text

DateTime.ParseExact(datestring3, result3, provider)

strsql = "insert into notifiche_01(not_comunicazione, not_opera, not_indirizzo, not_localita, not_committente, not_comm_cf, not_responsabile, not_resp_cf, not_coord1, not_cor1_cf, not_inizio, not_fine, not_impresa, not_impresa_noniscritta, not_impr_cf, not_comune, not_importo)" & _
"values (@comunica, '" & indirizzo.Text & "', '" & comune.SelectedValue & "', '" & committente.Text & "', '" & comm_cf.Text & "', '" & responsabile.Text & "', '" & resp_cf.Text & "', '" & coordinatore.Text & "', '" & coord_cf.Text & "', @dataini, @datafin, '" & impresa.SelectedValue & "', '" & impresanoniscritta.Text & "', '" & partitaiva.Text & "', '" & comunesede.Text & "', '" & CInt(importo.Text) & "')"

strdiv = "RECORD INSERITO CORRETTAMENTE <br /><a href='PAGEINI.aspx'>CLICCARE QUI PER TORNARE AL MENU</a>"
End If
If operazione.Text = "CANCELLAZIONE" Then
strsql = "delete from notifiche_01 where not_opera=" & ubicazione.Text & " "
strdiv = "Record eliminato correttamente. <br /><a href='notprel.aspx'>Ritorna</a>"
End If
conn = New SqlConnection(strconn)
command = New SqlCommand(strsql, conn)
command.Parameters.AddWithValue("@comunica", result)
command.Parameters.AddWithValue("@dataini", result2)
command.Parameters.AddWithValue("@datafin", result3)

command.Connection.Open()
command.ExecuteNonQuery()
command.Connection.Close()
risultato.Visible = True
risultato.InnerHtml = strdiv
form_blocco.Visible = False
Else
risultato.InnerHtml = "Form non valido"
End If
End Sub

...mi segnala errore sui tre campi result, result2, result3 che io definisco come quelli dove arriva la stringa convertita ma mi dice che sono campi non definiti

inoltre mi dice che cultureinfo non è dichiarato (manca una libreria ??).

spero cmq di aver capito il sistema ...spero...

Grazie, Maurizio
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