Pregunta

Tengo una página web que tengo conectada a un procedimiento almacenado.En esta fuente de datos SQL, tengo un parámetro que paso al procedimiento almacenado de tipo int.

ASP.NET parece querer por defecto int32, pero el número no será superior a 6.¿Está bien anular el valor predeterminado de ASP.NET e ingresar 16 o habrá un conflicto en algún momento?

especificación:el campo de la base de datos tiene una longitud de 4 y una precisión de 10, si eso marca la diferencia en la respuesta.

¿Fue útil?

Solución

Si lo fuerza a que sea, por ejemplo, un byte y el número es superior a 255, corre el riesgo de sufrir un error de conversión (y se generará una excepción).Sin embargo, si sabes que no será superior a 6, no debería ser un problema.

Si fuera yo, simplemente lo usaría como un int normal, no estoy seguro de que se ahorre mucho más que unos pocos bytes al convertirlo en un byte.El riesgo de que se produzca la excepción es demasiado alto y perdería todos los beneficios si la hiciera más pequeña.

Otros consejos

Quédate con int32.De todos modos, eso es lo que es "Integer" de vb y INT de SQL.

No obtendrá ninguna mejora significativa en el rendimiento si utiliza tinyint/byte o short/int16 en lugar de int/int32.

De hecho, los dolores de cabeza que podrías tener en el futuro causados ​​por todo el casting que tendrías que hacer para objetos que esperan int32s te volverán loco.

Cuando dices que el campo DB tiene una longitud de 4, eso significa 4 bytes, lo que equivale a un Int32 (4 bytes = 32 bits).Es por eso que su columna se devuelve como int32.

Hay diferentes tipos de datos enteros en SQL Server: si está seguro de que el número no será superior a 6, debe declarar la columna en la base de datos como "tinyint", que utiliza un solo byte y puede contener valores de 0 a 255.Luego, la fuente de datos SQL debería convertirlo a un tipo de datos "byte", lo cual estará bien para sus propósitos.

Clr "byte" == sql "tinyint" (1 byte) clr "corto" (o int16) == sql "smallint" (2 bytes) clr "int32" == sql "int"

EDITAR:Sólo porque puedas hacer algo no significa que debas hacerlo. Estoy de acuerdo con michael haren, el dolor de cabeza de desarrollo que implica administrar estos tipos de datos menos comunes supera la pequeña ganancia de rendimiento que obtendría, a menos que esté tratando con software de muy alto rendimiento (en cuyo caso, ¿por qué usaría ASP.NET?)

No estás ahorrando mucho o nada al usar un Int16 en el lado ASP.Eventualmente todavía tiene que cargarlo en un registro de 32 bits.

Para su información, CLR asigna int a Int32 internamente de todos modos.

Usa lo que sea que tu Servidor SQL El procedimiento almacenado ha definido.Si es un int en SQL Server y luego utilice Int32 en .NET.Smallint en SQL es int16.

De lo contrario, SQL Server simplemente lo convertirá automáticamente o generará un error si es necesario realizar una conversión descendente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top