Jakiego rozmiaru używasz dla varchar (MAX) w deklaracji parametru?


190

Zwykle ustawiam rozmiar kolumny podczas tworzenia parametru w ADO.NET

Ale jakiego rozmiaru używam, jeśli kolumna jest VARCHAR(MAX)?

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

Odpowiedzi:


288

W tym przypadku używasz -1.


5
czy jest jakaś wada wydajności w ustawianiu wszystkich długości parametrów na -1, więc nie muszę utrzymywać listy dopasowań db?
Andrew Bullock,

1
Varchar (max) jest traktowany identycznie jak varchar (8000) dla wartości mniejszych niż 8000 bajtów. W przypadku większych wartości pole jest traktowane jako pole „tekstowe” (inaczej „CLOB”). Może to wpłynąć na optymalizację planu zapytań i wydajność wyszukiwania wierszy o większych wartościach w tej kolumnie, ponieważ dane są przechowywane „poza wierszem”, co wymaga dodatkowego wyszukiwania.
KeithS

Użyj nvarchar (max) w sql i zdefiniuj długość -1 za pomocą SqlDbType.NVarchar in c #
Romil Kumar Jain

Gdyby nie odpowiedź Sama Meshesha poniżej - nie trafiłbym w twoją odpowiedź. Twoja odpowiedź może uzyskać więcej głosów, jeśli podasz przykładowy wiersz kodu sformatowanego jako kod.
qxotk

51

Dla tych z nas, którzy nie widzieli -1 Michała Chaniewskiego, pełna linia kodu:

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

2

Maksymalny rozmiar SqlDbType.VarChar to 2147483647.

Jeśli użyjesz ogólnego połączenia oledb zamiast sql, znalazłem tutaj również typ danych LongVarChar. Jego maksymalny rozmiar to 2147483647.

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

1

Nie musisz przekazywać parametru rozmiaru, po prostu zadeklaruj, że Varcharjuż rozumiesz, że ma on wartość MAX:

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

1
Może to mieć negatywny wpływ na serwer SQL ze względu na sposób obliczania planu wykonania.
yaakov,

Stwierdziłem, że tak nie jest w przypadku używania parametru wyjściowego. Powoduje to następujący błąd: „Wyjątek: Ciąg [2]: właściwość Rozmiar ma niepoprawny rozmiar 0.” Aby to naprawić, użyj Rozmiar = -1 patrz stackoverflow.com/questions/21087950/…
Michael K

1

Jeśli zrobisz coś takiego:

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

rozmiar zostanie pobrany z „jakiegoś dużego tekstu” .Length

Może to być problematyczne, gdy jest to parametr wyjściowy, nie odzyskujesz więcej znaków, niż wstawiasz jako dane wejściowe.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.