I кажется напоминает, что иногда можно быстрее получить значение как объект и затем проверить, является ли это DBNull.
private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
object value = dataReader.GetValue(fieldIndex);
return value is DBNull ? (Int32?) null : (Int32) value;
}
По крайней мере, стоит попробовать.Обратите внимание, что это предполагает, что вы можете распаковать прямо на int
... Я не знаю наверняка, правильно ли это, но это будет легко увидеть.
Теперь есть другой подход, который несколькоменее безопасный - он вернет ноль для любого нецелого значения, даже если поле на самом деле является строкой, например:
private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
return dataReader.GetValue(fieldIndex) as Int32?;
}
Я ранее писал об «как», а типы, допускающие обнуление, не являютсябыстрый, как я ожидал, но это может быть немного другой случай ... опять же, стоит попробовать.
Однако я был бы очень удивлен, если это действительно узкое место ... конечнов первую очередь получение данных из базы данных будет намного дороже.У вас есть для этого критерии?