SqlDataReader.GetString и sqlnullvalueexception
Я новичок в С#. Я выполнял некоторые запросы на выборку из таблиц базы данных, используя классы System.Data.SqlClient. Я получил sqlnullvalueexception при выполнении некоторого запроса select. В googling я узнал, что если в базе данных значение null, SqlDataReader.GetString(или его варианты) будет вызывать sqlnullvalueexception.
Какова наилучшая практика кодирования для этого?
if (!sqlDataReader.IsDBNull(n)) value = r.GetString(n);
Какой лучший способ кодирования?
Ответы
Ответ 1
Если вы не хотите много повторять это, просто создайте вспомогательную функцию, например:
public static class DataReaderExtensions
{
public static string GetStringOrNull(this IDataReader reader, int ordinal)
{
return reader.IsDBNull(ordinal) ? null : reader.GetString(ordinal);
}
public static string GetStringOrNull(this IDataReader reader, string columnName)
{
return reader.GetStringOrNull(reader.GetOrdinal(columnName));
}
}
Что вы можете назвать так:
value = reader.GetStringOrNull(n);
Ответ 2
Код, который вы опубликовали, в порядке. Вы также можете сделать что-то вроде этого:
value = r[n] as string;
Если значение в базе данных равно null, r[n]
вернет DBNull.Value, а приведение в string
вернет null
.
Ответ 3
Это действительно лучший способ сделать это, если вы хотите избежать каких-либо исключений. Вам нужно решить, является ли нулевое поле исключительной ситуацией в вашем коде, если он не использует этот метод. Если это произойдет, я бы предположил, что вы либо разрешаете исключение, либо бросаете исключение, и завертываете его в более сложное исключение и бросаете его.
Но главное знать, что это стандартный способ извлечения значений из считывателя данных, когда пустое поле не представляет исключительной ситуации в домене приложения.
Ответ 4
Это сработало для меня:
value = reader.GetValue(n).ToString();