Приведение или преобразование при получении данных из базы данных? - PullRequest
5 голосов
/ 08 октября 2008

При доступе к объекту в DataTable, полученному из базы данных, есть ли причины не преобразовывать объект в нужный тип или есть причины использовать преобразование? Я знаю, что правило применяется, когда мы знаем, с каким типом данных мы работаем, и преобразовываю, когда пытаюсь изменить тип данных на что-то, что не является. Предполагая, что мы знаем, какой тип данных хранится в столбце, приведение кажется подходящим, но есть ли какие-либо проблемы с типом БД, которые означают, что мы не можем полагаться на это?

Ответы [ 3 ]

4 голосов
/ 08 октября 2008

Я бы всегда читал по причинам, которые вы указали. Я знаю, что вам нужно разобраться с ошибками:

  1. Очевидно, что вам нужно иметь возможность обрабатывать DBNulls (например, путем тестирования с помощью Convert.IsDBNull)

  2. В случае с ExecuteScalar я считаю, что вам нужно проверить на нулевое значение, а также на DBNull.

  3. Функции SQL Server @@ IDENTITY и SCOPE_IDENTITY возвращают числовые (десятичные) значения даже для столбцов, объявленных как INT. В этом случае вы можете дважды привести «(int) (десятичное) значение» или обработать его в коде T-SQL, например: .

    Вставить в MyTable ... ВЫБЕРИТЕ AutoIdColumn ИЗ MyTable, ГДЕ AutoIdColumn = SCOPE_IDENTITY ()

или

INSERT INTO MyTable ...
SELECT CAST(SCOPE_IDENTITY() AS INT)
0 голосов
/ 30 ноября 2008

При получении из RDBMS вы должны позволить драйверу базы данных обрабатывать сортировку между собственным и запрошенным типом.

CAST санкционирован стандартами SQL и работает на самом большом количестве платформ СУБД.

CONVERT доступен на меньшем количестве платформ.

Если у вас мультиплатформенные заключения, CONVERT следует использовать только для особых случаев, таких как пользовательское форматирование, которое невозможно выполнить с помощью CAST.

0 голосов
/ 08 октября 2008

И CAST, и CONVERT используются для явного преобразования выражения одного типа данных в другой. Однако с помощью CONVERT вы также можете указать стиль format .

Синтаксис для CAST:

CAST ( expression AS data_type [ (length ) ])

Синтаксис для CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...