Я заметил следующее поведение:Как Npgsql дело с типами литых
В pgAdmin я выполнить этот запрос, и я получаю этот результат:
SELECT
CAST(COALESCE(c.latitude, '-1') as varchar),
CAST(COALESCE(c.longitude, '-1') as varchar)
FROM mytable c WHERE c.acolumn = 'S' AND c.anothercolumn=1
---------------------------------
coalesce coalesce
character varying character varying
"-25.30089" | "-57.625866"
Я использую Npgsql версии 2.2.4.3 в C# проект, я выполнить тот же запрос, используя IDbCommand и IDataReader и я получаю эти результаты:
IDbCommand cmd = con.CreateCommand();
cmd.Connection = con;
IDataReader reader = null;
cmd.CommandText = "SELECT CAST(COALESCE(c.latitude, '-1') as varchar), CAST(COALESCE(c.longitude, '-1') as varchar) FROM mytable c WHERE c.acolumn = 'S' AND c.anothercolumn=1";
cmd.CommandType = CommandType.Text;
reader = cmd.ExecuteReader();
while (reader.Read())
{
string latitude_r= reader.GetValue(0).ToString();
string longitude_r= reader.GetValue(1).ToString();
}
---------------------------------------------
latitude_r "-25.300889999999999" string
longitude_r "-57.625866000000002" string
Может кто-нибудь объяснить мне, почему? потому что я использую интерфейс .NET IDbCommand? есть ли способ получить точное значение без этих дополнительных десятичных значений? это определение PostgreSQL столбцов:
ALTER TABLE mytable ADD COLUMN longitude double precision;
ALTER TABLE mytable ADD COLUMN latitude double precision;