Подтвердить что ты не робот

SqlDataReader.GetString и sqlnullvalueexception

Я новичок в С#. Я выполнял некоторые запросы на выборку из таблиц базы данных, используя классы System.Data.SqlClient. Я получил sqlnullvalueexception при выполнении некоторого запроса select. В googling я узнал, что если в базе данных значение null, SqlDataReader.GetString(или его варианты) будет вызывать sqlnullvalueexception. Какова наилучшая практика кодирования для этого?

if (!sqlDataReader.IsDBNull(n)) value = r.GetString(n);

Какой лучший способ кодирования?

4b9b3361

Ответ 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();