2011-02-09 27 views
7

Necesito leer la fila de datos de SQL Server 2008. El tipo de una de las columnas es VARBINARY(MAX). En C#, quiero usar el parámetro out para leerlo (y el escenario dado satisface las necesidades principalmente).Lea VARBINARIO (MAX) desde SQL Server a C#

Pero necesito especificar el tamaño de la variable del parámetro para llenar la variable C#. Aquí suponer que 8000 es suficiente ... pero quién sabe:

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

Así que las preguntas son:

  1. ¿Cuál es el tamaño de MAX en número para SQL Server 2008?
  2. ¿Está bien utilizar el parámetro out para este escenario?

Respuesta

4

Como dijo @marc_s, solo querré agregar algo.

Hay dos tipos de datos

binario [(n)]

de longitud fija de datos binarios con una longitud de n bytes, donde n es un valor de 1 a 8.000. El tamaño de almacenamiento es n bytes.

varbinary [(n | max)]

de longitud variable de datos binarios. n puede ser un valor de 1 a 8,000. max indica que el tamaño máximo de almacenamiento es 2^31-1 (es igual a int.MaxValue, es decir, 2,147,483,647) bytes. El tamaño de almacenamiento es la longitud real de los datos ingresados ​​+ 2 bytes. Los datos que se ingresan pueden tener 0 bytes de longitud.

si especifica max entonces su preocupación debe ser con varbinary en lugar de binario

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

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

+0

¡Gracias por señalar la diferencia! –

1

No he visto un tamaño explícito en ninguna parte para MAX. ¿Has intentado ejecutar esto usando DbType.Object? Eso se define en msdn como un tipo general para cualquier tipo no definido explícitamente. Lo probaría y vería si funciona o no. De lo contrario, probablemente me quedaría con DbType.Binary como usted elija.

5

El tamaño máximo para VARBINARY(MAX) es de 2 GB de datos - 2'147'483'648 bytes.

En su caso, cuando lo defina en C#, recomendaría usar int.MaxValue como valor a proporcionar.

Y sí, si desea recuperar la matriz de bytes de la tabla de SQL Server 2008, definitivamente puede usar un parámetro out.

+3

El tamaño de SqlClient para tipos máx. Es '-1'. El Framework entiende esto como un tipo 'max'. –

+0

@Remus Rusanu: bien, gracias, ¡es bueno saberlo! (Pero tampoco he tenido problemas con int.MaxValue, hasta ahora :-) –

+0

Sí, int.MaxValue se ve bien para mí. –

Cuestiones relacionadas