Получить строку из базы данных postgresql с помощью datareader

Я использовал это для добавления значения для переменной с MySQL:

var var1 = datareader.GetString("something");

Но с PostgreSQL я получаю следующую ошибку:

"невозможно преобразовать строку в int"

Как я могу получить строку из базы данных PostgreSQL?


person X11    schedule 05.08.2017    source источник


Ответы (1)


Вы можете получить это с

var var1 = datareader.GetString(reader.GetOrdinal("something"));

Обычно GetString требуется целое число, представляющее позицию столбца в возвращаемом наборе записей. Но любой конкретный провайдер может расширить GetString, чтобы получить значение напрямую из строкового значения (как это делает провайдер для MySql), но если они не предоставляют это расширение, вам нужно использовать шаблон, который требует использования GetOrdinal

Конечно, вы можете написать расширение самостоятельно. Просто добавьте этот метод в статический класс

public static object GetString(this NpgsqlDataReader source, string colname)
{
     if(string.IsNullOrEmpty(colname))
        throw ArgumentException("Need a column name");

     return source.GetString(source.GetOrdinal(colname));
}

и теперь ваш способ вызова GetString будет работать.

person Steve    schedule 05.08.2017