Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117

    Problema salvataggio Data

    Ciao, ho una variabile di tipo DateTime, come posso assegnare una data in
    formato short??

    ho provato a fare

    Var = Convert.ToDateTime(dr["Data"]).ToShortDataString

    in questo modo non mi consente di assegnare un valore string a var che è di
    tipo di DateTime

    il campo del datareader contiene un campo del tipo 07/05/2006 21.50.11, io
    invece vorrei salvare nella variabile solo la data e non l'orario

    Ogni soluzione mi va bene, il vero problema è che in fase di salvataggio nel DB (campo in formato DataTime) ottengo un errore di conversione del tipo char in datetime

    come deve essere l'insert nel DB??

    ... "CampoDB = ' " + MiaVar + " '....

    ho provato anche a fare

    ... "CampoDB = " + MiaVar + " ...

    ma le virgole i punti e le virgole nell'orario incasinano la query

    vorrei trovare una soluzione applicabile sia a SQL Server che Access

  2. #2

    Re: Problema salvataggio Data

    Originariamente inviato da valeria75
    come deve essere l'insert nel DB??
    ... "CampoDB = ' " + MiaVar + " '....
    argh VVoVe:
    bisognerebbe sempre partire dal presupposto di usare i parametri nelle query altrimenti non risolverai mai facilmente i problemi dei vari tipi di dati e impostazioni del server.
    Quindi, non "appiccicare" i valori nelle query sql come fossero tutte stringhe altrimenti su un server funziona su un altro server non funziona piu'. Usa i parametri. Sono piu' semplici da gestire e mantegono la tipizzazione dei dati. Ado.net poi convertira' automaticamente i dati nel modo giusto a seconda delle impostazioni (di sqlserver o di access o di altro db).
    es. (scrivo a memoria quindi alcunecose saranno da rivedere)
    codice:
    tuocommand.commandtext = "INSERT INTO tabella (campo1, campo2) VALUES (?, ?)"
    tuocommand.parameters.add("?", oledbtype.integer).value = tuavarint
    tuocommand.parameters.add("?", oledbtype.datetime).value = tuavardata
    tuocommand.executenonquery
    Saluti a tutti
    Riccardo

  3. #3
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    E' vero!

    Purtroppo però attualmente non posso modificare questo codice scritto da altri...



    come potrei risolvere il problema?? (almeno per ora)

    Grazie

  4. #4
    Originariamente inviato da valeria75
    Purtroppo però attualmente non posso modificare questo codice scritto da altri...
    come potrei risolvere il problema?? (almeno per ora)
    devi comunque modificare il codice.
    Invece di modificarlo continuando a sbagliare cercando di usare una stringa, lo modifichi inserendo nella stringa sql un segno ? al posto di ' " + MiaVar + " ' e prima di chiamare la funzione execunenonquery del command scrivi
    codice:
    tuocommand.parameters.add("?", oledbtype.datetime).value = tuavardata
    Saluti a tutti
    Riccardo

  5. #5
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Forse sono riuscita a convincere chi di dovere per la modifica della query

    Potresti dirmi come dovrebbe essere strutturata correttamente??

    io ora ho

    string Query = "INSERT INTO (campo campo) ... bla bla bla"

    e poi ExecuteNonQuery(Query)

    potresti dirmi (facendo un esempio di un primo campo) come dovrebbe essere una query di INSERT/UPDATE??

    Grazie per l'aiuto!

  6. #6
    Originariamente inviato da valeria75
    Potresti dirmi come dovrebbe essere strutturata correttamente??
    mi sembrava di averti fatto un esempio nel post precedente
    Originariamente inviato da valeria75 io ora ho
    string Query = "INSERT INTO (campo campo) ... bla bla bla"
    esempi sull'uso dei parametri te li ho gia' fatti in questo post e li trovate anche in quantita' su msdn e/o in qualsiasi altra documentazione a riguardo. Iniziate a modificare di consueguenza il codice ed eventualmente posta il codice e gli errori che incontrate.
    Saluti a tutti
    Riccardo

  7. #7
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Grazie!

    E' possibile utilizzare un identificativo piuttosto che il "?"

    esempio ?Codice, ?Nome...

  8. #8
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Scusa ma ho un problema, io faccio un:

    Var.ExecuteNonQuery(String)

    dove Var è una classe che contiene oggetti per la gestione del DB... potresti aiutarmi a capire se attraverso questi metodi posso applicare la gestione dei parametri?? Grazie per l'aiuto

    public Boolean ExecuteNonQueryEx(string cmdText)
    {
    try
    {
    NewCommand(cmdText).ExecuteNonQuery();
    return true;
    }
    catch(Exception ex)
    {
    ...
    }
    }



    public object ExecuteNonQuery(string cmdText)
    {
    return NewCommand(cmdText).ExecuteNonQuery();
    }



    public GParameter NewParameter(string paramName, DbType ColType, object val)
    {
    return new GParameter(this, paramName, ColType, val);
    }


    public GParameter NewParameter(string paramName, string SourceColumn, DbType ColType)
    {
    return new GParameter(this, paramName, SourceColumn , ColType);
    }

    public GParameter NewParameter()
    {
    return new GParameter(this);
    }

    public DataTable ExecuteDataTableSP(string cmdText)
    {
    return NewSP(cmdText).ExecuteDataTable();
    }

    public GCommand NewCommand()
    {
    return new GCommand(this);
    }

    ...

    Grazie infinite per l'aiuto!

  9. #9
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Per ora ho fatto:

    Var.NewParameters("NomeParametro", DbType.VarChar, ValoreCampo);
    ....


    ma a questo punto ho due dubbi:

    1) Come inserisco la query di INSERT/DELETE
    2) Come eseguo il tutto



    Var.ExecuteNonQuery();???


    Grazie

  10. #10
    Originariamente inviato da valeria75
    Var.ExecuteNonQuery(String)
    dove Var è una classe che contiene oggetti per la gestione del DB...
    Praticamente passi da un estremo all'altro. Prima non usi i parametri e incolli i valori come stringhe nella query. Ora cerchi di usare i parametri usando una classe e dei metodi diversi da quelli offerti da ado.net e scritti da non si capisce chi.
    A prima vista, la classe sembra scritta per consentire una pseudo indipendenza dal tipo di database sottostante. A me sembra una mezza ciofeca ma i gusti sono gusti.
    Consiglio:
    1. butta var nel cestino
    2. studiati l'uso dei parametri usando i comandi messi a disposizione da ado.net
    3. in un secondo momento scriviti eventualmente delle funzioni per facilitarti la vita oppure usa il microsoft data access application block
    E' possibile utilizzare un identificativo piuttosto che il "?"
    Come penso saprai esistono vari dataprovider ognuno specializzato su un certo database. Il dataprovider oledb e' creato per utilizzare un qualsiasi database compatibile appunto con oledb. Il dataprovider oledb (oledbclient) utilizza come segnaposto dei parametri il segno ? e per l'assegnazione del parametro con il rispettivo valore non utilizza i nomi (come invece fa il dataprovider per sqlserver) ma bensi l'ordine con cui sono stati inseriti nella query sql i segni ? e l'uguale ordine con cui vengono poi valorizzati i parametri nel command.
    Saluti a tutti
    Riccardo

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 © 2025 vBulletin Solutions, Inc. All rights reserved.