Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    problema con la data.parseexact

    Sono un novello sviluppatore in asp.net, per poter risolvere in modo definitivo un problema di conversione di date (da gg/mm/aaaa da inputazione a yyyy-mm-dd su tabella sqlserver) ho utilizzato l'istruzione datatime.parsexact.

    Ecco come ho agito:

    Dim datadritta, format As String
    Dim result As Date
    Dim provider As system.Iformatprovider = CultureInfo.InvariantCulture
    datestring = comunica.Text
    format = "dd/mm/yyyy"

    result = Date.ParseExact(datadritta, format, provider)

    Ma mi restituisce errore segnalandomi una errata conversione delle stringhe di dati

    lanciando il debug vedo che :


    datadritta contiene 02/12/2010 che è correttamente la data impostata a video
    format ovviamente dd/mm/yyyy
    provider (system.globalization.cultureinfo)

    mentre result (che immagino dovrebbe contenere il campo date) contiene #12:00:00 am# ......

    cosa sbaglio ?

    grazie, Maurizio

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    sbagli nella stringa di formato

    dd\/MM\/yyyy



    M sta per mese

    m sta per minuto

    Pietro

  3. #3
    grazie !!!!

  4. #4
    Ho provato a modificare il campo format secondo quanto mi hai segnalato ma continua a segnalare l’errore:
    Conversione non riuscita durante la conversione di una stringa di caratteri in una data o ora.
    Il debug segnala nel campo che inputo 06/12/2010 mentre nel result che il campo date mette 12/6/2010 (formato americano) mentre io ho la necessità di avere un campo con il formato yyyy-mm-dd per aggiornare una tabella in un database sqlserver.
    Ecco il codice:
    Dim PROVIDER As System.IFormatProvider = CultureInfo.InvariantCulture
    Dim datadritta, format As String
    Dim result As DateTime
    format = "dd\/MM\/yyyy"
    datadritta = comunica.Text
    result = Date.ParseExact(datadritta, format, PROVIDER)


    strsql = "insert into notifiche_01(not_comunicazione, …..)" & _
    "values (@comunica, ….)"

    strdiv = "RECORD INSERITO CORRETTAMENTE
    CLICCARE QUI PER TORNARE AL MENU"
    conn = New SqlConnection(strconn)
    command = New SqlCommand(strsql, conn)

    command.Parameters.AddWithValue("@comunica", "result")
    ……….
    command.Connection.Open()
    command.ExecuteNonQuery()

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    stai facendo un piccolo errore

    command.Parameters.AddWithValue("@comunica", "result")
    invece di
    command.Parameters.AddWithValue("@comunica", result)


    ma non si fa così: si usano i parametri per delegare il lavoro di scrittura dell'sql al sistema.

    Perciò, non trasformare una stringa data in data, tanto il parametro vuole un object non una data e, se gli dai una data, lui la trasforma in object, con una diminuzione di prestazioni.

    Io faccio così: (access)
    codice:
    Comando.Parameters.Add("data_ora", OleDbType.Date).Value = StringNullToDBNull(c_data_ora.Text)
    dove StringNullToDBNull è una funzione
    codice:
    Public Function StringNullToDBNull(ByVal s As String) As Object
    	If s IsNot Nothing Then s = s.Trim
    	If (s = "") Then
    		Return DBNull.Value
    	Else
    		Return s
    	End If
    End Function
    Pietro

  6. #6
    FUNZIONA PERFETTAMENTE !!! io utilizzo sqlserver ma ho sostituito opportunamente l'istruzione e ora mi aggiorna il db senza problemi.

    Visto che sei stato cosi gentile avrei un ultimo problemino....

    in fase di variazione, ossia effettuando l'update, mi segnala in fase di convalida questo errore:

    not_comunicazione invalid name

    il campo si riferisce sempre al campo data, anche in questa fase ho effettuato le modifiche ma penso si tratti di qualcosa in fase di update ecco il codice:

    If operazione.Text = "MODIFICA" Then
    strsql = "update notifiche_01 set not_comunica =@comunica, " & _
    "not_opera=@opera, " & _
    "not_localita=@comune, " & _
    "not_indirizzo=@indirizzo, " & _
    "not_committente=@committente, " & _
    "not_comm_cf=@comm_cf, " & _
    "not_responsabile=@responsabile, " & _
    "not_resp_cf=@resp_cf, " & _
    "not_coord1=@coordinatore, " & _
    "not_cor1_cf=@coord_cf, " & _
    "not_inizio=@dataini, " & _
    "not_fine=@datafin, " & _
    "not_impresa=@impresa, " & _
    "not_impresa_noniscritta=@impresanoniscritta, " & _
    "not_impr_cf=@partitaiva, " & _
    "not_comune=@comunesede, " & _
    "not_importo=@importo " & _
    "where not_opera=@opera"

    strdiv = strsql & " Record modificato correttamente.
    Ritorna"
    End If



    If operazione.Text = "CANCELLAZIONE" Then
    strsql = "delete from notifiche_01 where not_opera='" & ubicazione.Text & "'"
    strdiv = "RECORD ELIMINATO CORRETTAMENTE.
    CLICCARE QUI PER TORNARE AL MENU"
    End If

    conn = New SqlConnection(strconn)
    command = New SqlCommand(strsql, conn)
    command.Parameters.Add("@comunica", SqlDbType.Date).Value = stringnulltodbnull(comunica.Text)
    command.Parameters.AddWithValue("@opera", ubicazione.Text)
    command.Parameters.AddWithValue("@indirizzo", indirizzo.Text)
    command.Parameters.AddWithValue("@comune", comune.SelectedValue)
    command.Parameters.AddWithValue("@committente", committente.Text)
    command.Parameters.AddWithValue("@comm_cf", comm_cf.Text)
    command.Parameters.AddWithValue("@responsabile", responsabile.Text)
    command.Parameters.AddWithValue("@resp_cf", resp_cf.Text)
    command.Parameters.AddWithValue("@coordinatore", coordinatore.Text)
    command.Parameters.AddWithValue("@coord_cf", coord_cf.Text)
    command.Parameters.Add("@dataini", SqlDbType.Date).Value = stringnulltodbnull(dataini.Text)
    command.Parameters.Add("@datafin", SqlDbType.Date).Value = stringnulltodbnull(datafin.Text)
    command.Parameters.AddWithValue("@impresa", impresa.SelectedValue)
    command.Parameters.AddWithValue("@impresanoniscrit ta", impresanoniscritta.Text)
    command.Parameters.AddWithValue("@partitaiva", partitaiva.Text)
    command.Parameters.AddWithValue("@comunesede", comunesede.Text)
    command.Parameters.AddWithValue("@importo", CInt(importo.Text))


    command.Connection.Open()
    command.ExecuteNonQuery()
    command.Connection.Close()
    risultato.Visible = True
    risultato.InnerHtml = strdiv

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    non posso aiutarti più di tanto perchè è un poco complicato collaudare quel codice; ma qualche consiglio lo posso dare:

    1) io utilizzo sempre la funzione StringNullToDBNull(valore) perchè altrimenti, se valore è una stringa nulla e deve essere messo in un campo stringa, si deve convertire in null. Perciò ogni campo va controllato.

    2) se ho molti campi da aggiornare e ottengo errore, è difficile scroprire quale campo non va.
    Io scrivo l'istruzione un campo alla volta, collaudo e, se va, continuo aggiungendo un altro campo, fino a trovare qullo che dà errore.

    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.