Qual tamanho você usa para varchar (MAX) na sua declaração de parâmetro?

190

Normalmente, defino o tamanho da minha coluna ao criar um parâmetro no ADO.NET

Mas qual tamanho eu uso se a coluna for VARCHAR(MAX)?

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

Respostas:

288

Nesse caso, você usa -1.

Michał Chaniewski
fonte
5
existe alguma desvantagem de desempenho ao definir todos os comprimentos de parâmetro como -1, então não preciso manter uma lista de correspondência de banco de dados?
Andrew Bullock
1
Varchar (max) é tratado de forma idêntica a varchar (8000) para valores menores que 8000 bytes. Para valores maiores, o campo é tratado como um campo "texto" (também conhecido como "CLOB"). Isso pode afetar a otimização do plano de consulta e a eficiência da recuperação de linhas com valores maiores nesta coluna, pois os dados são armazenados "fora da linha", exigindo uma pesquisa extra.
31415 KeithS
Uso nvarchar (max) na SQL e definir comprimento -1 com SqlDbType.NVarchar em c #
Romil Kumar Jain
Se não fosse a resposta de Sam Meshesha abaixo - eu teria perdido sua resposta. Sua resposta pode receber mais votos se você colocar uma linha de código de exemplo formatada como código.
qxotk 02/04
51

Para aqueles de nós que não viram -1 por Michal Chaniewski, a linha completa de código:

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

O tamanho máximo de SqlDbType.VarChar é 2147483647.

Se você usasse uma conexão oledb genérica em vez de sql, encontrei aqui também um tipo de dados LongVarChar. Seu tamanho máximo é 2147483647.

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

Você não precisa passar o parâmetro size, basta declarar que Varcharjá entende que é MAX, como:

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";
Igor Macedo
fonte
1
Isso pode ter efeitos negativos no servidor SQL devido à forma como o Plano de Execução é calculado.
yaakov
Achei que esse não era o caso ao usar um parâmetro de saída. Isso resulta no seguinte erro 'Exceção: String [2]: a propriedade Size possui um tamanho inválido de 0.' Para corrigir isso, use Size = -1, consulte stackoverflow.com/questions/21087950/…
Michael K,
1

Se você fizer algo assim:

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

tamanho será retirado de "algum texto grande" .Comprimento

Isso pode ser problemático quando é um parâmetro de saída, você não recebe mais caracteres e coloca como entrada.

Alberto Tromba
fonte