Я не думаю, что на самом деле есть разница (они делают то же самое), второе кажется мне более читабельным, так как введение «указателя» сбивает с толку тех, кто не знает, как работает читатель. Спрячьте ненужную сложность, говорю я. Вы должны сделать шаг вперед и сделать его универсальным, который вы можете использовать где угодно, например так:
private static T FromDbValue<T>(IDataReader rdr, string columnName)
{
var value = rdr[columnName];
if (value == DBNull.Value)
{
return default(T);
}
return (T)value;
}
Вызов это легко:
var someString = FromDbValue<string>(rdr, "CustomerName");
Edit:
Вы не проверяете DBNull во втором примере, поэтому приведение не будет выполнено для нулей. Однако, вообще говоря, два подхода одинаковы.