Целочисленный тип по умолчанию в ASP.NET из хранимой процедуры - PullRequest
0 голосов
/ 12 сентября 2008

У меня есть веб-страница, которую я подключил к хранимой процедуре . В этом источнике данных SQL у меня есть параметр, который я передаю обратно в хранимую процедуру типа int.

ASP.NET , по-видимому, хочет установить значение по умолчанию int32 , но число не будет больше 6. Допустимо ли переопределить ASP.NET по умолчанию и вставить 16 или где-нибудь в будущем будет конфликт?

спецификация: поле базы данных имеет длину 4 и точность 10, если это имеет значение в ответе.

Ответы [ 6 ]

1 голос
/ 12 сентября 2008

Используйте все, что определено в вашей SQL Server хранимой процедуре. Если это int в SQL Server, то используйте Int32 в .NET. smallint в SQL это int16.

В противном случае SQL Server просто преобразует его автоматически или выдает ошибку, если его необходимо преобразовать с понижением частоты.

1 голос
/ 12 сентября 2008

К вашему сведению, CLR в любом случае сопоставляет int с Int32 внутренне.

1 голос
/ 12 сентября 2008

Вы не много экономите, если используете что-либо, используя Int16 на стороне ASP. Это все еще должно загрузить это в 32-разрядный регистр в конечном счете.

1 голос
/ 12 сентября 2008

Когда вы говорите, что поле DB имеет длину 4, это означает 4 байта, что эквивалентно Int32 (4 байта = 32 бита). Вот почему ваш столбец возвращается как int32.

Существуют разные целочисленные типы данных в SQL Server - если вы уверены, что число не превысит 6, вы должны объявить столбец в базе данных как "tinyint", который использует один байт и может содержать значения от 0 до 255. Затем источник данных SQL должен преобразовать его в «байтовый» тип данных, который подойдет для ваших целей.

CLR "byte" == SQL "tinyint" (1 байт) CLR "Short" (или int16) == SQL "smallint" (2 байта) CLR "int32" == SQL "int"

РЕДАКТИРОВАТЬ: просто потому, что вы можете что-то делать, не значит, что вы должны - я согласен с Michael Haren , головная боль при разработке этих менее распространенных типов данных перевешивает небольшой прирост производительности, который вы получите если вы не имеете дело с очень высокопроизводительным программным обеспечением (в таком случае, почему вы используете ASP.NET?)

1 голос
/ 12 сентября 2008

Палка с int32. Во всяком случае, это то, что vb "Integer" и INT INT SQL.

Вы не добьетесь значительного улучшения производительности, если будете использовать tinyint / byte или short / int16 вместо int / int32.

На самом деле, головные боли, с которыми вы можете столкнуться в будущем, вызванные всеми действиями, которые вам, возможно, придется выполнять для объектов, ожидающих, что int32s сведут вас с ума.

1 голос
/ 12 сентября 2008

Если вы зададите, например, байт, а число превысит 255, вы рискуете вызвать ошибку приведения (и будет выдано исключение). Однако, если вы знаете, что он не будет выше 6, это не должно быть проблемой.

Если бы это был я, я бы просто использовал его как обычный int, я не уверен, что вы сэкономите много, если ничего, кроме нескольких байтов, сделав его байтом. Риск создания исключения слишком велик, и вы потеряете все преимущества, уменьшив его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...