Приведение или преобразование при извлечении данных из базы данных?

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

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Решение

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

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

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

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

    ВСТАВИТЬ В MyTable ...ВЫБЕРИТЕ AutoIdColumn Из MyTable, ГДЕ AutoIdColumn = SCOPE_IDENTITY()

или

INSERT INTO MyTable ...
SELECT CAST(SCOPE_IDENTITY() AS INT)

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

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

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

CAST ( expression AS data_type [ (length ) ])

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

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

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

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

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

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

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