Pergunta

Eu tenho uma página da web que conectei a um procedimento armazenado.Nesta fonte de dados SQL, tenho um parâmetro que estou passando de volta para o procedimento armazenado do tipo int.

ASP.NET parece querer padronizar int32, mas o número não será superior a 6.Posso substituir o padrão do ASP.NET e colocar 16 ou haverá um conflito em algum lugar no futuro?

especificação:o campo do banco de dados tem comprimento 4 e precisão 10, se isso fizer diferença na resposta.

Foi útil?

Solução

Se você forçar que seja, por exemplo, um byte e o número for superior a 255, você corre o risco de ocorrer um erro de conversão (e uma exceção será lançada).No entanto, se você sabe que não será superior a 6, não deverá ser um problema.

Se fosse eu, eu o usaria apenas como um int normal, não tenho certeza se você economizará muito, senão alguns bytes, tornando-o um byte.O risco de a exceção ser lançada é muito alto e você perderia todos os benefícios ao torná-la menor.

Outras dicas

Fique com int32.De qualquer forma, isso é o "Integer" do vb e o INT do SQL.

Você não obterá nenhuma melhoria significativa de desempenho usando um tinyint/byte ou um short/int16 em vez de int/int32.

Na verdade, as dores de cabeça que você poderá ter no futuro, causadas por toda a conversão que você terá que fazer para objetos que esperam int32s, o deixarão louco.

Quando você diz que o campo DB tem comprimento 4, isso significa 4 bytes, o que equivale a um Int32 (4 bytes = 32 bits).É por isso que sua coluna está sendo retornada como int32.

Existem diferentes tipos de dados inteiros no SQL Server - se tiver certeza de que o número não será superior a 6, você deve declarar a coluna no banco de dados como "tinyint", que usa um único byte e pode conter valores de 0 a 255.Em seguida, a fonte de dados SQL deve convertê-la em um tipo de dados "byte", o que será adequado para seus propósitos.

CLR "BYTE" == SQL "TinyInt" (1 byte) CLR "Short" (ou int16) == SQL "SmallInt" (2 bytes) CLR "int32" == SQL "INT"

EDITAR:só porque você pode fazer algo, não significa que deva - concordo com Michael Haren, a dor de cabeça do desenvolvimento ao gerenciar esses tipos de dados menos comuns supera o pequeno ganho de desempenho que você obteria, a menos que você esteja lidando com software de altíssimo desempenho (nesse caso, por que você usaria ASP.NET?)

Você não está economizando muito usando um Int16 no lado ASP.Ele ainda precisa carregá-lo em um registro de 32 bits.

Para sua informação, o CLR mapeia int para Int32 internamente de qualquer maneira.

Use qualquer que seja o seu Servidor SQL procedimento armazenado definiu.Se for um int no SQL Server e use Int32 no .NET.smallint em SQL é int16.

Caso contrário, o SQL Server apenas fará a conversão ascendente automaticamente ou gerará um erro se for necessário fazer a conversão descendente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top