2008-10-08 2 views
5

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

ответ

4

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

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

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

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

    INSERT INTO MyTable ... ВЫБОР AutoIdColumn ОТ MyTable ГДЕ AutoIdColumn = SCOPE_IDENTITY()

или

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

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

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

CAST (expression AS data_type [ (length) ]) 

Синтаксис CONVERT:

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

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

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

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

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

Смежные вопросы