2011-02-09 8 views
7

Potrzebuję odczytać wiersz danych z SQL Server 2008. Typ jednej z kolumn to VARBINARY(MAX). W języku C# chcę użyć parametru out do odczytu (a dany scenariusz w większości zaspokaja potrzeby).Przeczytaj VARBINARY (MAX) z SQL Server do C#

Ale muszę określić rozmiar zmiennej parametru, aby wypełnić zmienną C#. Tu zakładamy, że 8000 jest na tyle ... Ale kto wie:

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

więc pytania są:

  1. Jaka jest wielkość max w liczbie dla SQL Server 2008?
  2. Czy można użyć parametru out dla tego scenariusza?

Odpowiedz

4

Jak powiedział @marc_s, po prostu chcę coś dodać.

Istnieją dwa typy danych

binarny [(A)]

stałej długości dane binarne o długości n bajtów, gdzie n przyjmuje wartość od 1 do 8,000. Rozmiar pamięci to n bajtów.

varbinary [(N | max)]

zmiennej długości danych binarnych. n może mieć wartość od 1 do 8 000. max wskazuje, że maksymalny rozmiar pamięci wynosi 2^31-1 (to znaczy, że int.MaxValue to 2 147 483 647) bajtów. Rozmiar pamięci to rzeczywista długość wprowadzonych danych + 2 bajty. Wprowadzone dane mogą mieć długość 0 bajtów.

jeśli określając max wówczas obawy powinny być z varbinary zamiast binarnego

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

database.AddOutParameter (polecenie, "vbCertyfikat", SqlDbType.VarBinary, int.MaxValue);

+0

Dzięki za wskazanie różnicy! –

1

Nie widziałem żadnego wyraźnego rozmiaru dla MAX. Czy próbowałeś wykonywania tego przy użyciu DbType.Object? Jest to zdefiniowane na msdn jako typ ogólny dla dowolnego typu, który nie jest jawnie zdefiniowany. Spróbuję tego i zobaczę czy to działa, czy nie. W przeciwnym razie prawdopodobnie przylegałbym do DbType.Binary, tak jak wybrałeś.

5

Maksymalny rozmiar dla VARBINARY(MAX) to 2 GB danych - 2'147'483'648 bajtów.

W twoim przypadku, definiując go w C#, polecam użyć int.MaxValue jako wartości do podania.

I tak, jeśli chcesz odzyskać tablicę bajtów z tabeli SQL Server 2008, możesz zdecydowanie użyć parametru out.

+3

Wielkość SqlClient dla typów maksymalnych to '-1'. Framework rozumie to jako typ "max". –

+0

@Remus Rusanu: ok, dzięki - dobrze wiedzieć! (ale ja też nie miałem problemów z int.MaxValue :-) –

+0

Tak, int.MaxValue wygląda dobrze dla mnie. –

Powiązane problemy