Che dimensione usi per varchar (MAX) nella tua dichiarazione dei parametri?


190

Normalmente imposto la dimensione della mia colonna durante la creazione di un parametro in ADO.NET

Ma quale dimensione devo usare se la colonna è VARCHAR(MAX)?

cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;

Risposte:


288

In questo caso usi -1.


5
c'è qualche svantaggio prestazionale nell'impostare tutte le lunghezze dei parametri su -1, quindi non devo mantenere un elenco di corrispondenza db?
Andrew Bullock,

1
Varchar (max) viene trattato in modo identico a varchar (8000) per valori inferiori a 8000 byte. Per valori più grandi il campo viene trattato come un campo "testo" (detto anche "CLOB"). Ciò può influire sull'ottimizzazione del piano di query e sull'efficienza del recupero di righe con valori maggiori in questa colonna, poiché i dati vengono archiviati "fuori riga" e richiedono una ricerca aggiuntiva.
KeithS

Usa nvarchar (max) in sql e definisci la lunghezza -1 con SqlDbType.NVarchar in c #
Romil Kumar Jain,

Se non fosse per la risposta di Sam Meshesha di seguito, avrei perso la tua risposta. La tua risposta potrebbe ottenere più voti se inserisci una riga di codice di esempio formattata come codice.
qxotk,

51

Per quelli di noi che non hanno visto -1 di Michal Chaniewski, la riga di codice completa:

cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text";

2

La dimensione massima di SqlDbType.VarChar è 2147483647.

Se dovessi usare una connessione oledb generica invece di sql, ho trovato qui che esiste anche un tipo di dati LongVarChar. La sua dimensione massima è 2147483647.

cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";

1

Non è necessario passare il parametro size, basta dichiarare Varchargià capisce che è MAX come:

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

1
Ciò può avere effetti negativi sul server SQL a causa del modo in cui viene calcolato il piano di esecuzione.
Yaakov,

Ho trovato questo non è il caso quando si utilizza un parametro di output. Il risultato è il seguente errore "Eccezione: String [2]: la proprietà Size ha una dimensione non valida di 0". Per risolvere questo problema, utilizza Size = -1 vedi stackoverflow.com/questions/21087950/…
Michael K,

1

Se fai qualcosa del genere:

    cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

la dimensione sarà presa da "un testo di grandi dimensioni" .Lunghezza

Questo può essere problematico quando si tratta di un parametro di output, non si ottengono più caratteri e si inserisce come input.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.