none
Prevenire l'errore: I dati di tipo string o binary verrebbero troncati RRS feed

  • Domanda

  • Ciao,

    a volte mi capita effettuando una INSERT o UPDATE che venga generato questo errore:  I dati di tipo string o binary verrebbero troncati.

    Ovviamente l'errore viene generato perchè il dato che passo come parametro della query non è conforme alla lunghezza definita sul database.

    Mi chiedevo però se era possibile fare in modo di prevenire o rilevare almeno il campo che ha dato questo errore.

    Io sto usando questo statement per passare i parametri: SqlCommand.Parameters.AddWithValue("@Parametro", valore)), che non aiuta a rilevare gli errori di questo tipo.

    Per la prevenzione si potrebbe usare lo statement: "SqlCommand.Parameters.Add(new SqlParameter("@Parametro", tipodato, lunghezza)" che tronca i dati troppo lunghi, ma mi obbliga a scrivere nel codice la lunghezza del campo e quindi se viene variato bisogna poi andarselo a modificare.

    Nel caso si voglia continuare ad usare il primo metodo, come posso recuperare almeno il nome del parametro che ha generato l'eccezione???

    lunedì 12 marzo 2012 10:07

Tutte le risposte

  • ciao

    se ho capito bene, tu vuoi scrivere un codice che automaticamente ti dica la colonna che è in errore? o che automaticamente ti tronchi la colonna in errore scondo la sua dimensione?

    SQL server ha delle tabelle nel database Master e delle SP apposite per avere i dati delle altre tabelle, inclusa dimensione delle varie colonne

    potresti procedere così, anche se personalmente non farei mai una cosa simile... al più, userei i metadati per generare una UI ad hoc con messaggi di validazione per la dimensione...

    a presto


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     

    lunedì 12 marzo 2012 10:30
  • Ciao, non proprio, in effetti sono non sono stato chiarissimo nella richiesta. Provo a riassumere:

    1) Visto che ho molti programmi già in produzione, vorrei trovare il modo di estrarre dall'eccezione generata il parametro o la colonna che ha generato l'eccezione: I dati di tipo string o binary verrebbero troncati.

    Ragionando è l'unica cosa che mi serve, perché sto per passare ad EF Code First e con i metadati risolvo abbastanza velocemente il problema.

    Grazie,

    ciao!

    lunedì 12 marzo 2012 18:10
  • ciao

    capito

    quindi ti consiglio sempre di usare le tabelle di sistema di SQL Server e prevalidare i dati che stai passando al DB così che l'eccezione arriverà dal tuo codice (con il tuo messaggio di errore) e non da SQL stesso

    a presto


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     

    lunedì 12 marzo 2012 19:32