2011-02-09 16 views
7

Ho bisogno di leggere la riga di dati da SQL Server 2008. Il tipo di una delle colonne è VARBINARY(MAX). In C# voglio usare il parametro out per leggerlo (e lo scenario dato soddisfa maggiormente i bisogni).Leggi VARBINARY (MAX) da SQL Server a C#

Ma ho bisogno di specificare la dimensione della variabile del parametro per riempire la variabile C#. Qui Presumo che 8000 è abbastanza ... ma chissà:

database.AddOutParameter(command, "vbCertificate", DbType.Binary, 8000); 

Quindi le domande sono:

  1. Qual è la dimensione di MAX in numero per SQL Server 2008?
  2. E 'ok usare questo parametro per questo scenario?

risposta

4

Come ha detto @marc_s, voglio solo aggiungere qualcosa.

Esistono due tipi di dati

binario [(n)]

lunghezza fissa dati binari con una lunghezza di n byte, dove n è un valore compreso tra 1 e 8.000. La dimensione di archiviazione è n byte.

varbinary [(n | max)]

lunghezza variabile dati binari. n può essere un valore compreso tra 1 e 8.000. max indica che la dimensione massima della memoria è 2^31-1 (equivale a int.MaxValue cioè 2.147.483.647) byte. La dimensione della memoria è la lunghezza effettiva dei dati inseriti + 2 byte. I dati inseriti possono essere 0 byte di lunghezza.

se si specifica max allora la vostra preoccupazione dovrebbe essere con varbinary invece di binario

database.AddOutParameter (comando, "vbCertificate", DbType.Binary, 8000);

database.AddOutParameter (comando "vbCertificate", SqlDbType.VarBinary, int.MaxValue);

+0

Grazie per la differenza di puntamento! –

1

Non ho mai visto una dimensione esplicita per MAX. Hai provato a eseguirlo usando DbType.Object? Questo è definito su msdn come un tipo generale per qualsiasi tipo non definito esplicitamente. Vorrei provarlo e vedere se funziona o no. Altrimenti, probabilmente mi limiterei a DbType.Binary come hai scelto.

5

La dimensione massima per VARBINARY(MAX) è di 2 GB di dati - 2'147'483'648 byte.

Nel tuo caso, quando lo definisco in C#, ti consiglio di utilizzare int.MaxValue come valore da fornire.

E sì, se si desidera recuperare l'array di byte dalla tabella di SQL Server 2008, è possibile utilizzare il parametro out.

+3

La dimensione SqlClient per i tipi max è '-1'. Il Framework lo comprende come un tipo 'max'. –

+0

@Rusus Rusanu: ok, grazie - buono a sapersi! (ma non ho avuto nemmeno problemi con int.MaxValue, finora :-) –

+0

Sì, int.MaxValue sembra buono per me. –

Problemi correlati