Domanda

Quando si accede a un oggetto in una DataTable recuperata da un database, ci sono dei motivi per non trasmettere l'oggetto nel tipo desiderato o ci sono ragioni per usare convert? So che la regola viene lanciata quando sappiamo con quale tipo di dati stiamo lavorando e la conversione quando proviamo a cambiare il tipo di dati in qualcosa che non è. Presumendo che sappiamo quale tipo di dati è archiviato in una colonna, il cast sembra appropriato, ma ci sono problemi di tipo DB che indicano che non possiamo fare affidamento su questo?

È stato utile?

Soluzione

Vorrei sempre lanciare, per i motivi che affermi. I gotcha di cui sono a conoscenza che devi gestire sono:

  1. Ovviamente devi essere in grado di gestire DBNulls (ad es. testando con Convert.IsDBNull)

  2. Nel caso di ExecuteScalar credo che sia necessario verificare la presenza di null e DBNull.

  3. Le funzioni
  4. SQL Server @@ IDENTITY e SCOPE_IDENTITY restituiscono valori numerici (decimali) anche per le colonne dichiarate come INT. In questo caso puoi lanciare due volte il valore " (int) (decimale) " o gestirlo nel codice T-SQL, ad es .: .

    INSERISCI IN MyTable ... SELEZIONA AutoIdColumn FROM MyTable DOVE AutoIdColumn = SCOPE_IDENTITY ()

o

INSERT INTO MyTable ...
SELECT CAST(SCOPE_IDENTITY() AS INT)

Altri suggerimenti

Sia CAST che CONVERT sono utilizzati per convertire esplicitamente un'espressione di un tipo di dati in un altro. Tuttavia, con CONVERT puoi specificare anche lo stile formato .

Sintassi per CAST:

CAST ( expression AS data_type [ (length ) ])

Sintassi per CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Durante il recupero da RDBMS è necessario consentire al driver del database di gestire il marshalling tra il tipo nativo e richiesto.

CAST è sanzionato dagli standard SQL e funziona con il maggior numero di piattaforme RDBMS.

CONVERT è disponibile su un numero inferiore di piattaforme.

Se si dispone di concorsi multipiattaforma, CONVERT deve essere utilizzato solo per casi speciali come la formattazione personalizzata che non può essere eseguita con CAST.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top