Question

J'ai une page Web que j'ai connectée à un procédure stockée.Dans cette source de données SQL, j'ai un paramètre que je renvoie à la procédure stockée de type int.

ASP.NET semble vouloir utiliser par défaut int32, mais le nombre ne dépassera pas 6.Est-il possible de remplacer la valeur par défaut d'ASP.NET et de mettre 16 ou y aura-t-il un conflit quelque part plus tard ?

spécification:le champ de la base de données a une longueur de 4 et une précision de 10, si cela fait une différence dans la réponse.

Était-ce utile?

La solution

Si vous le forcez à être par exemple un octet et que le nombre est supérieur à 255, vous courez le risque d'une erreur de conversion (et une exception sera levée).Cependant, si vous savez que ce ne sera pas supérieur à 6, cela ne devrait pas poser de problème.

Si c'était moi, je l'utiliserais simplement comme un entier normal, je ne suis pas sûr que vous économisiez grand-chose, sinon quelques octets, en en faisant un octet.Le risque que l'exception soit levée est trop élevé et vous perdriez tous les avantages en la réduisant.

Autres conseils

Restez fidèle à int32.C'est de toute façon ce qu'est "Integer" de vb et INT de SQL.

Vous n'obtiendrez aucune amélioration significative des performances en utilisant un tinyint/byte ou un short/int16 au lieu de int/int32.

En fait, les maux de tête que vous pourriez rencontrer à l'avenir à cause de tous les castings que vous pourriez avoir à faire pour des objets qui attendent des int32 vous rendront fou.

Lorsque vous dites que le champ DB a une longueur de 4, cela signifie 4 octets, ce qui équivaut à un Int32 (4 octets = 32 bits).C'est pourquoi votre colonne est renvoyée sous la forme d'un int32.

Ils sont différents types de données entiers dans SQL Server - si vous êtes sûr que le nombre ne dépassera pas 6, vous devez déclarer la colonne de la base de données comme un "tinyint", qui utilise un seul octet et peut contenir des valeurs de 0 à 255.Ensuite, la source de données SQL doit la convertir en un type de données "octet", ce qui conviendra à vos besoins.

Clr "byte" == SQL "Tinyint" (1 octet) clr "short" (ou int16) == SQL "smallInt" (2 octets) clr "int32" == SQL "int"

MODIFIER:ce n'est pas parce que vous pouvez faire quelque chose que vous devriez le faire -- je suis d'accord avec Michael Haren, le problème de développement lié à la gestion de ces types de données moins courants dépasse le faible gain de performances que vous obtiendriez, à moins que vous n'ayez affaire à un logiciel très performant (auquel cas, pourquoi utiliseriez-vous ASP.NET ?)

Vous n'économisez pas grand chose, voire rien, en utilisant un Int16 du côté ASP.Il doit encore éventuellement le charger dans un registre 32 bits.

Pour information, le CLR mappe de toute façon int sur Int32 en interne.

Utilisez quel que soit votre Serveur SQL procédure stockée a défini.Si c'est un int dans SQL Server, puis utilisez Int32 dans .NET.smallint en SQL est int16.

Sinon, SQL Server le convertira simplement automatiquement ou générera une erreur s'il doit être converti en bas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top