Целочисленный тип по умолчанию в ASP.NET из хранимой процедуры

StackOverflow https://stackoverflow.com/questions/59651

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Когда вы говорите, что поле базы данных имеет длину 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"

Редактировать:просто потому, что вы можете что-то сделать, это не значит, что вы должны - я согласен с Майкл Харен, головная боль разработчиков, связанная с управлением этими менее распространенными типами данных, перевешивает небольшой прирост производительности, который вы получили бы, если только вы не имеете дело с очень высокопроизводительным программным обеспечением (в этом случае зачем вам использовать ASP.NET?)

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top